4

セットの使い方!(+ (f 0) (f 1)) を評価すると、 + への引数が左から右に評価される場合は 0 が返されるが、引数が右から左に評価される場合は 1 が返されるような単純な手続き f で?

4

2 に答える 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 に答える