変数は *、+、および / SlimeまたはClozure CLの最近の入力に結合していますか?

StackOverflow https://stackoverflow.com/questions/3679234

  •  02-10-2019
  •  | 
  •  

質問

私はこれを発見したとき、私はスライム(クローズのリプルを接続している)でいじりました:

変数 +、 *、および /はすべて、最近の入力のいくつかのバリエーションに結合しているように見えます。 +は入力自体であり、 *はその入力を評価した結果であり、 /はリストに含まれる結果です。

これは正しいですか?誰がこれに責任を負いますか、スライムまたはクローズ?スライムマニュアルには何も見つかりませんでした。

ありがとう!

; SLIME 2010-05-13
CL-USER> +
NIL
CL-USER> *
NIL
CL-USER> /
(NIL)
CL-USER> -
-
CL-USER> +
-
CL-USER> (list 1 2)
(1 2)
CL-USER> +
(LIST 1 2)
CL-USER> /
((LIST 1 2))
CL-USER> (+ 1 2)
3
CL-USER> /
(3)
CL-USER> *
(3)
CL-USER> (* 1 2)
2
CL-USER> *
2
CL-USER> 
役に立ちましたか?

解決

これらはすべて、一般的なLISP標準で指定されています。探す 環境辞書 「変数」の場合。

他のヒント

+
++
+++

フォームがトップレベルのループによって評価されている間、変数 +はループで読み取られた前のフォームに結合されます。変数++は、以前の値の +(つまり、2つの相互作用が前に評価された)の以前の値を保持し、+++は以前の値の++を保持します。

-

フォームはトップレベルのループによって評価されていますが、変数はフォーム自体にバインドされています。つまり、この相互作用が完了したら、 +に与えられる価値があります。

*
**
***

フォームはトップレベルのループによって評価されていますが、変数 *は、ループを介して最後の時間の最後に印刷された結果に結合されます。つまり、 +のフォームを評価することによって生成される値です。いくつかの値が生成された場合、 *には最初の値のみが含まれます。 *ゼロ値が生成された場合、nilが含まれます。変数**は *の以前の値を保持します(つまり、結果は2つの相互作用が前に印刷されました)、そして * **の以前の値を保持します。

/
//
///

フォームはトップレベルのループによって評価されていますが、変数 /はループを介して最後に印刷された結果のリストにバインドされています。つまり、 +のフォームを評価することによって生成されるすべての値のリストです。 *の値は常に /の値の車と同じでなければなりません。変数//は /(つまり、結果は2つの相互作用が前に印刷された)を保持し、///は//の以前の値を保持します。したがって、**の値は常に//の車と同じでなければならず、同様に * と ///。

から 一般的なLisp The Language、第2版20.2

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top