1. ホーム
  2. scheme

[解決済み】Schemeのbeginの使い方は?

2022-02-20 09:11:59

質問

を使用する方法がわかりません。 begin キーワードは、Schemeで一連の式を書くのに便利です。

だって、式を書くときって、左から右へ評価されるんじゃないの?それなのに、なぜ begin というキーワードがあります。

私は、次のように読みました。 begin は、入力と出力から副作用を排除することになっています。どなたか、beginが必要な状況を教えてください。

どのように解決するのですか?

begin は、構文上1つの形式しか許されていないのに、複数の形式が必要な場合に必要となります。例えば、ある変数をインクリメントする必要がある場合 y を使用するたびに

(+ x 
   (begin (set! y (+ y 1)) y) 
   z)

もしbeginを省略したら、この式は単に書けない(Common Lispでは、同じ式は次のように書ける)。 (+ x (incf y) z) ).

なお (set! x y) は値を返しません。このため begin というのは (begin f1 f2 ... fn) が評価するのは f1 ... fn の値を順番に返し、その後に fn . だから (begin (set! y (+ y 1)) y) の値を増加させます。 yy が評価され、その新しい値が返されます。

begin は通常、何らかの副作用がある場合に使用されます。