1

だから私は継続を扱っていて、次のようなものがあります:

(or
    (call/cc (lambda (cont)
           ...
          (if ( ... )
              (cons randomList (lambda() (cont #f)))
              #f)})}
     ( do something else)

(lambda()(cont #f))と(cont #f)の違いは何だろうと思っていました。私はラムダで私が望む答えを得るが、それなしで何かが間違っている。誰かが違いを説明できますか?ありがとう。

4

1 に答える 1

1

このように使用されるnullary(ゼロ引数)ラムダはサンクと呼ばれます。

サンクは、Schemeで、コードの一部の実行を延期するために使用されます。たとえば、の(display #f)代わりに話しているとします(cont #f)。直接記述した場合(display #f)、コードの実行がそのポイントに達すると#fすぐに表示されますが、サンク()でラップした場合は、サンクを呼び出すまで(lambda () (display #f))は表示されません。#f

コードに戻ると、コード内のa(cont #f)は、継続が呼び出された時点で即座にジャンプします。サンクでラップすると、サンクを呼び出すまで継続の呼び出しが遅れます。

于 2012-11-15T01:54:06.857 に答える