let中的read-line将不会读取下一行

时间:2014-01-23 20:27:35

标签: scheme guile

  1 (use-modules (ice-9 rdelim))
  2 
  3 (define (show l) (display l))
  4 
  5 (define (read-two-lines)
  6         (let ((count  (read-line))
  7               (l      (read-line)))
  8              (show l))) ; or (show count)
  9              
 10 (read-two-lines)

上面的代码无法将第二行读入l。相反,它只读取相同的值两次: -

scheme@(guile-user)> (load "test.scm")

line1
line2
line1

当line1后跟line2作为输入时,它将line1显示为输出而不是line2。这里发生了什么?

1 个答案:

答案 0 :(得分:2)

我没有安装Guile,所以我无法测试,但在Scheme let中不保证任何评估顺序。所以我最好的猜测是count包含第二行,l包含第一行。

尝试使用let*代替let

(define (read-two-lines)
  (let* ((count  (read-line))
         (l      (read-line)))
    (show l)))

有关更详尽的说明,请参阅here