2010年5月24日月曜日

On Lisp Common Lisp to Scheme 7

Figure 4.7: I/O functions.

(define my-read-line
  (lambda args 
    (let ((str (apply read-line args)))
      (if (equal? str "")
          (apply read-line args)
          str))))

(define readlist
  (lambda args
    (values (read-from-string
      (string-append "("
                     (apply my-read-line args)
                     ")")))))
                     
(define prompt
  (lambda args
    (apply format (current-output-port) args)
    (flush (current-output-port))
    (read (current-input-port))))

(define-macro (loop x)
  `(call/cc
    (lambda (return)
      (while #t
             ,x))))

(define break-loop
  (lambda (fn quit . args)
    (format (current-output-port) "Entering break-loop.~%")
    (flush (current-output-port))
    (loop
      (let ((in (apply prompt args)))
        (if (quit in)
            (return)
            (format (current-output-port) "~A~%" (fn in)))))))

0 コメント: