例えば、
(cond ((< 2 1) 2 )((< 1 2 ) 1)) の値は 1 です。
しかし、(cond (diverge 1) (ture 0))
私の主要な本で、分岐が終了しない場合、それは未定義であることがわかりました。
Lispの発散は何ですか??
私はそれを知りません。
また、Lisp の副作用が正確にはわかりません。
例えば、
(cond ((< 2 1) 2 )((< 1 2 ) 1)) の値は 1 です。
しかし、(cond (diverge 1) (ture 0))
私の主要な本で、分岐が終了しない場合、それは未定義であることがわかりました。
Lispの発散は何ですか??
私はそれを知りません。
また、Lisp の副作用が正確にはわかりません。
あなたが最初に意図したコードが
(cond ((diverge 1) (ture 0)))
diverge
その場合、その式の結果は、その名前が示すように発散操作であると仮定すると、未定義です (または、より良い発散も) 。
発散操作は、たとえば無限ループのように、結果に収束しない操作です。
diverge
Common Lisp 標準には定義がありません(実用的な目的は何ですか?)。そのため、あなたの本では、発散計算を操作でラップして適切な名前を付けることで、発散計算の「実装の詳細」を省略しているだけです。
diverge
元のコードがシンボル マクロであると仮定した場合、同じ動作が発生する可能性があることに注意してください。
示されているように、diverge
ブールture
値として評価される変数に名前を付けます。式全体の値は、真の場合は 1、diverge
真の場合は 0、どちらも真ture
でない場合は0 です。nil
diverge
コンテキスト、特にとがどのようture
にバインドされているかを示していないため、スニペットについてこれ以上言うことはできません。
多分あなたはのようなものを意味しました(cond ((diverge 1) (ture 0)))
。その後diverge
、オペレーターになります。それは Common Lisp 標準では定義されていないので、あなたの本のどこかから来ている可能性が高いです。