セットの使い方!(+ (f 0) (f 1)) を評価すると、 + への引数が左から右に評価される場合は 0 が返されるが、引数が右から左に評価される場合は 1 が返されるような単純な手続き f で?
9429 次
2 に答える
5
最も簡単な方法は、おそらく何らかの外部状態を保存し、その内容に影響を与える f の実装を持たせることです。
(define x 0)
(define (f n) (let ((tmp x)) (set! x n) tmp))
したがって、x は最初は 0 であり、f を呼び出すたびに x の現在の値が返され、引数が x の新しい値として保存されます。したがって、(f 0) の後に (f 1) を実行すると、どちらも 0 が返され、最終的な x の値は 1 のままになります。(f 1) の後に (f 0) を評価すると、0 の後に 1 が返され、最終的な x は 0 になります。
于 2008-11-19T00:40:36.197 に答える
-1
call/ccを使用します。
(define (f)
(call/cc
(lambda (c) (+ (c 0) (c 1)))))
(write (f))
+
いずれかの引数内でcを呼び出すとf
、すぐに戻り、どちらの引数が最初に評価されるかに応じて0または1が生成されます。
しかし、私はそれが常に左から右に評価し、したがって0を返すと思います。
于 2009-04-22T08:16:04.953 に答える