29
setq
とsetf
と類似しているかどうか? flet
とlabels
に大きな違いはありませんか?Common Lispの "flet"と "labels"の違いは何ですか?
よろしくお願いいたします。 Common Lispでは
setq
とsetf
と類似しているかどうか? flet
とlabels
に大きな違いはありませんか?Common Lispの "flet"と "labels"の違いは何ですか?
よろしくお願いいたします。 Common Lispでは
、flet
とlabels
の両方がわずかに異なる種類の字句バインディングを作る:
flet
は結合ローカル関数のための特殊な形式です。 バインディングは再帰的ではなく、互いに参照することはできません。各バインディングには、関数名、引数、関数本体が含まれています。
labels
は、ローカル関数バインディングの特殊な形式です。 バインディングは再帰的であり、互いに参照することができます。各バインディングには、関数名、引数、関数本体が含まれています。
Emacs Lispでは、少し違いがあります。 ラベルフォームは、fletのようですが、動的バインディングではなく関数名の字句バインディングを行います。
fletを使ってfooで関数fooを定義すると、包含スコープ内の 'foo'という別の関数を参照することができますが、ラベルでは自身を参照することができます。 –
質問は明示的にCommon Lisp、* not Emacs Lispに関するものでした。混乱の原因となる可能性があるため、最初の段落を削除するとよいでしょう。多くのLisp方言があります - この問題はCommon Lispに関するものです。 – Drew