my-display.scm 897 B

1234567891011121314151617181920212223242526272829303132
  1. (define (display-symbol form) (display form))
  2. (define (display-char ch) (display ch))
  3. (define (display-chars ch) (for-each display-char ch))
  4. (define (display-boolean form)
  5. (if form
  6. (display-chars '(#\# #\t))
  7. (display-chars '(#\# #\f))))
  8. (define (display-int form) (display form))
  9. (define (my-display form)
  10. (cond ((symbol? form) (display-symbol form))
  11. ((char? form) (display-char form))
  12. ((boolean? form) (display-boolean form))
  13. ((number? form) (display-int form))
  14. ((null? form) (display-chars '(#\( #\))))
  15. ((pair? form)
  16. (display-char #\()
  17. (let loop ((form form))
  18. (my-display (car form))
  19. (cond ((null? (cdr form))
  20. (display-char #\)))
  21. ((pair? (cdr form))
  22. (display-char #\space)
  23. (loop (cdr form)))
  24. (else (display-chars '(#\space #\. #\space))
  25. (my-display (cdr form))
  26. (display-char #\))))))))