問題タブ [lisp-2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
3848 参照

variables - Common Lisp と Scheme における関数と変数の名前空間の分離

スキームは、変数が関数または他のタイプの値にバインドされているかどうかに関係なく、すべての変数に対して単一の名前空間を使用します。Common Lisp では、識別子 "hello" が 1 つのコンテキストでは関数を参照し、別のコンテキストでは文字列を参照するように、2 つを分離します。

(注1:この質問には上記の例が必要です。自由に編集して追加するか、元の作成者に電子メールで送信してください。そうします。)

ただし、関数をパラメーターとして他の関数に渡すなどの一部のコンテキストでは、プログラマーは、次のように を使用して、関数以外の変数ではなく関数変数を指定していることを明示的に区別する必要があります#'

私はいつもこれを少しいぼだと考えてきましたが、最近、これは実際には機能であるという議論に出くわしました:

...重要な違いは、実際にはオブジェクトの型ではなく、フォームの構文にあります。関連するランタイム値について何も知らなくても、関数形式の最初の要素が関数でなければならないことは明らかです。CL はこの事実を取り入れて、静的に決定できる (そして決定しなければならない) マクロおよび特殊なフォームと共に、言語の一部にします。だから私の質問は、関数名の主な用途が、変数名がめったに現れたくない場所に現れることであるのに、なぜ関数の名前と変数の名前を同じ名前空間に入れたいのですか?
クラス名の場合を考えてみましょう: FOO という名前のクラスが FOO という名前の変数の使用を禁止する必要があるのはなぜですか? FOO という名前でクラスを参照するのは、クラス名が必要なコンテキストだけです。まれに、クラス名 FOO にバインドされているクラス オブジェクトを取得する必要がある場合は、FIND-CLASS があります。

この議論は、経験から私にはある程度理にかなっています。フィールドにアクセスするために使用される関数でもあるフィールド名を持つ Haskell で同様のケースがあります。これは少し厄介です:

NamedFieldPunsこれは、拡張機能によって特に優れた、少し余分な構文によって解決されます。

では、一貫性を超えた質問に対して、Common Lisp と Scheme の両方で、また一般的に、すべての値に対して単一の名前空間を使用する場合と、関数と関数以外の値を個別に使用する場合の利点と欠点は何ですか?

0 投票する
2 に答える
21917 参照

clojure - Lisp-1 と Lisp-2 の違いは何ですか?

Lisp-1 と Lisp-2 の違いと、これが Clojure とどのように関係しているかを理解しようとしましたが、まだ正しく理解できていません。誰でも私を啓発できますか?

0 投票する
4 に答える
1176 参照

lambda - 関数のラムダ値をリストの最初の要素として使用する

Peter Norvig の Paradigms of Artificial Intelligence Programming を読んでいて、自分では解決できない問題に遭遇しました (これは Lisp の紹介です)。この問題は実際には非常に小さな問題ですが、私の小さな脳が解決できる問題ではないことは明らかです。

関数の値がラムダの場合、その関数をリストの最初の要素として使用するとエラーになるのはなぜですか。例えば:

舌足らずの発音:

それが理にかなっていることを願っています!

0 投票する
4 に答える
929 参照

namespaces - Common Lisp と Lisp-n ?

Common Lisp には関数と変数に対して異なるバインディング環境があることは承知していますが、タグボディ ラベルに対して別のバインディング環境もあると思います。これよりも多くのバインド環境がありますか? もしそうなら、Common Lisp を Lisp-2 として分類するのは公平でしょうか?

これらの質問は衒学や自転車脱走を意図したものではありません。Common Lisp をよりよく理解したいだけであり、うまくいけば、その仕様をどこで深く掘り下げるかについての指針を得たいと思っています。

0 投票する
3 に答える
336 参照

nested - ((f 2) 3 4) のように、s 式を頭に持つ Lisp はありますか? そうでない場合、なぜですか?

ネストされた s 式を頭にサポートする Lisp はありますか? 例えば

for は(f 2)、適用する関数/マクロに評価されると推定されます3 4

そのようなことをサポートするLispを持つことは可能ですか? または、これを禁止する/非実用的にする技術的な制限はありますか?

0 投票する
1 に答える
841 参照

namespaces - 「Lisp-1 vs Lisp-2」は静的型を持つ言語に関連していますか?

(これは CS 理論タイプの質問です。受け入れられることを願っています。)

Lisp-1 対 Lisp-2」の議論は、関数の名前空間が他のすべての変数の名前空間と区別されるべきかどうかに関するものであり、プログラマが関数を値として渡すことを可能にする動的型付け言語に関連しています。fLisp-1 言語 (Scheme など) には名前空間が 1 つあるため、名前付きの関数と名前付きの整数の両方を持つことはできませんf(名前付きの 2 つの整数のように、一方が他方を隠しますf)。Lisp-2 言語 (Common Lisp など) には 2 つの名前空間があるため、両方のf変数を使用できますが、どちらを意味するかを特別な構文 (#'fは関数で、fは整数) で指定する必要があります。

主な技術的問題である整数から関数を明確にする必要性は、言語も静的に型付けされている場合 (ほとんどの Lisp とは異なり) 問題ではないように思えます。たとえば、sort関数が明示的な署名としてリストと未満関数を必要とする場合、

関数と他のすべてが同じ名前空間にあるかどうかは関係ありません。 sort(mylist, myless)が関数の場合にのみ型チェックに合格しmylessます。特別な構文は必要ありません。2 つの名前空間よりも 1 つの名前空間の方が美しいと主張する人もいますが、私は技術的な問題に焦点を当てたいと思います。

問題の言語が静的に型付けされていると仮定すると、2 つの名前空間によって (または逆に 1 つの名前空間に対して) より困難になったり、エラーが発生しやすくなったりするものはありますか?

(私が取り組んでいるドメイン固有言語のコンテキストでこれについて考えています。将来的に問題が発生しないようにしたいと考えています。2 つの名前空間で実装する方が簡単です ( Lisp-2) であり、静的に型付けされているため、 に相当するものは必要ありません#'f。一般的な質問をしたのは、一般的なポイントを聞きたいからであり、おそらく、まだ質問することを知らない質問に気づきたいからです。)

0 投票する
1 に答える
235 参照

macros - Common Lisp Lisp-1 マクロ

f!私は、ラムダに展開されるマクロ (Doug Hoyteo!に基づく) を使用して、共通 Lisp 内のスキームの単一の名前空間をエミュレートしようとしていますg!。同じ式ですが、funcall各呼び出しの関数位置に追加されています。例えば:

次のように展開されます。

現在、マクロは次のようになっています。

しかし、上記の入力を考えると、(私が見る限り)これに展開されます:

マクロレットの定義では、F!F を引用符で囲んだり、引用符を外したりしてはならず、parmlist は引用符を外してください。何が起こっている?前もって感謝します!

0 投票する
3 に答える
459 参照

clojure - Common Lisp で Clojure スタイルの callable オブジェクトをエミュレートする

Clojure では、ハッシュマップとベクトルは を実装invokeしているため、関数として使用できます。たとえば、

または、ベクトルの場合、

実装することで、Clojure で呼び出し可能なオブジェクトを作成できますIFn。私は Common Lisp に慣れていません -呼び出し可能なオブジェクトは可能ですか? もしそうなら、それを実装するには何が必要ですか? 次のようなことができるようになりたいです

コードが散らばっているのではなくaref。同様に、辞書などの他のデータ構造のエントリにも同じ方法でアクセスできればすばらしいと思います。

Lisp/Scheme の関数オブジェクトに関するwiki エントリを見てきましたが、別の関数名前空間を持つと CL の問題が複雑になるようですが、Scheme ではクロージャでこれを行うことができます。