0
  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 。这里发生了什么?

4

1 回答 1

2

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

尝试使用let*而不是let

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

有关更详尽的解释,请参见此处

于 2014-01-23T21:33:26.763 回答