問題タブ [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.
common-lisp - Scheme や STk では、関数は手続きやクロージャとして表示されますが、なぜ LISP はエラーを出すのでしょうか?
Ubuntu で MIT-Scheme を実行すると、関数がプロシージャとして表示されます。
バークレーの STk はsq
クロージャーとして表示されます。
Lisp (Common Lisp clisp) では、同じことを行うと、代わりにエラーが発生し、関数を値 (ファースト クラスの値/オブジェクト) として表示するにはどうすればよいでしょうか?
common-lisp - 別の関数から返された関数を funcall する必要があるのはなぜですか?
なぜこれが機能しないのですか?
funcall
私はこのような状況に遭遇し、後でそれを修正することが判明しました。
どちらの名前空間に属している可能性のあるシンボルだけでなく、実際に呼び出している関数があるため、最初の関数が機能するように見えるため、混乱しています(つまり(type-of ((lambda () #'1+))) ; => FUNCTION
)。たとえば、ラムダを必要としないのと同じようなものだと思いました。私は何が欠けていますか?funcall
((lambda (x) x) :HI) ; => :HI
common-lisp - alexandria:curry が必ずしも funcall を使用しないようにするのはばかげていますか?
現在、Alexandria でカリー化された関数は、curry
で呼び出す必要がありますfuncall
。ただし、新しい関数を設定して、symbol-function
それを使用せずに実際の関数のように扱うことができます。https://lispcookbook.github.io/cl-cookbook/functions.html#with-the-alexandria-libraryに示されています:
両方のスタイルを許可しない正当な理由はありますか? これは、カリー化のこのコンテキストでは非常に興味深いようです。
追記: 3 週間ほど前に Alexandria の問題トラッカーで質問しました
pps: https://gitlab.common-lisp.net/alexandria/alexandria/blob/master/functions.lisp#L116