Scheme や一般的に使用される「サンク」とは何ですか? 質問する

Scheme や一般的に使用される「サンク」とは何ですか? 質問する

Scheme や類似の分野に関連するコードやドキュメントの多くの場所で、「thunk」という単語に出会います。これは、単一の形式引数を持つプロシージャの一般的な名前だと推測しています。これは正しいでしょうか。正しい場合、さらに何かありますか。そうでない場合、教えてください。

例えば、SRFI 18の「手順」セクションをご覧ください。

ベストアンサー1

それは本当に簡単です。プログラムに3と5を足すような計算がある場合、そのサンクを作成すると、ない直接計算するのではなく、実際の値が必要になったときに計算する引数なしの関数を作成します。

(let ((foo (+ 3 5))) ; the calculation is performed directly, foo is 8
  ;; some other things
  (display foo)) ; foo is evaluated to 8 and printed

(let ((foo (lambda () (+ 3 5)))) ; the calculation is delayed, foo is a
                                 ; function that will perform it when needed
  ;; some other things
  (display (foo))) ; foo is evaluated as a function, returns 8 which is printed

2 番目のケースでは、fooサンクと呼ばれます。

遅延言語では、変数を値にバインドすることと、その値を返す関数を作成することの境界があいまいになるため、上記の最初の形式のようなものを記述すると、実際には内部的に 2 番目の形式のように扱われます。

おすすめ記事