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)

上記のコードは、2 行目を l に読み込むことができません。代わりに、同じ値を2回読み取るだけです:-

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

line1
line2
line1

line1 に続いて line2 が入力として与えられると、 line2 の代わりに line1 が出力として表示されます。ここで何が起きてるの?

4

1 に答える 1

2

私は Guile をインストールしていないので、これをテストすることはできませんが、Schemeletでは評価の順序は保証されません。したがって、私の最善の推測はcount、2 行目と 1 行目が含まれていることですl

let*の代わりに使用してみてくださいlet:

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

詳細については、こちらを参照してください。

于 2014-01-23T21:33:26.763 に答える