問題タブ [special-form]
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.
function - 特別な形ではなく、適切な機能である可能性があります
私はついに関数型言語(emacs lisp)の学習を開始しました。これにより、関数とフロー制御などの特殊な形式が明確に区別されます。
特殊な形式が関数と区別される基本的/理論的な理由はありますか?機能を提供する言語はありますif
か?
ありがとう
clojure - プログラムでclojureの特別なフォームのコレクションを取得する方法はありますか?
これに似たものはありますか?:
function - スキーム/ラケット:ブール値で折りたたむ
10
私が期待するものを返しますが、
エラーが発生します
foldr
関数(1つのリストがあるので2つのパラメーターを取ります)、基本ケース、およびリストを取ります。リストにゼロを超えるブール値があり、それらがすべてtrueである場合、コードの2行目がtrueを返すことを期待しています。これが、機能すると思った方法です。しかし、明らかにそうではありません。
lisp - 特殊な形式を通常の値として扱うことを許可すると、どのような結果になるでしょうか?
Clojure では、特別なフォームを引数として渡すことも、変数に保存することもできないことがわかりました。
ラケット/スキーム:
それはいいですね。特別なフォームをラップする関数を書いて、その関数を渡すことができることはわかっています。
しかし、Lisp にこの制限がある理由と、これを許可するとどのような悪影響があるかを知りたいです。それを可能にする主要な方言はありますか?
scheme - スキーム評価手順と特別なフォーム
Scheme の評価について質問があります。手順がどのように評価されるかを正しく理解していることを確認したいだけです。
そのため、Scheme インタプリタがリストの評価を開始すると、最初の要素が評価されます。これはプロシージャに評価する必要があります。そうしないと、エラーになります。このプロシージャが特別な形式でない場合、リストの各要素が評価され、パラメータとしてプロシージャに渡されます。プロシージャが特殊な形式の場合、異なる評価プロセスが実行されます。たとえば、最初のパラメータが評価され、次に 2 つまたは 3 つのうちの 1 つだけが評価されます。また、アトムはそれ自体、または以前にバインドされた値のいずれかに評価されます。
基本的に、すべてが評価されないようにするために特別なフォームが必要ですか? ありがとう
scheme - Scheme 、プリミティブ プロシージャ、および特殊なフォーム
スキームでは、プリミティブ手続きは特別な形式と見なされますか?
また、少し一般的すぎますが、define は他の特殊な形式とどのように違うのでしょうか?
ありがとう
clojure - 「do」特殊フォームは何をしますか?
ドキュメントには次のように記載されています。
(do exprs*)
式を順番に評価し、最後の値を返します。式が指定されていない場合は、nil を返します。
ただし、私はこれを行いました:
この結果:
hownowbrowncow2
では、なぜこれが再び必要なのですか?
function - Clojure のアスタリスク特殊フォーム (fn*、let* など)
多くの「特別なフォーム」は、バックグラウンドでアスタリスク バージョン (fn*、let* およびその他すべて) を使用する単なるマクロであることがわかりました。
たとえば、fn の場合、fn* だけでは提供されない分解機能がミックスに追加されます。fn* が単独でできることとできないことの詳細なドキュメントを見つけようとしましたが、それほど幸運ではありませんでした。
それは間違いなくサポートします:
&/キャッチオール インジケーター
/li>興味深いことに、次のようにアリティのオーバーロードも行われます。
/li>
だから私の質問は最終的に、定義するだけではないのはなぜですか:
これは絶対に最小限であり、マクロを介してすべてのアリティ選択を提供できます (パラメーター リストのサイズのチェック、コード パスを指示する if/case ステートメント、最初のいくつかのパラメーターを目的のシンボルにバインドするなど)。
これはパフォーマンス上の理由によるものですか? おそらく誰かが、便利なアスタリスク特殊フォームの実際の標準定義へのリンクを持っているかもしれません。
function - 特別なフォームを行うのはなぜですか?
Clojure では、do
このように実装された関数ではなく、なぜ特殊なフォームなのですか?
function - 特別な演算子/フォームを使用してCommon Lispで「+」を実装する方法
On Lisp (9 ページ)では、次の主張を見つけることができます。
関数は Lisp プログラムの構成要素です。それらは Lisp の構成要素でもあります。ほとんどの言語では、+ 演算子はユーザー定義関数とはまったく異なるものです。しかし、Lisp には、プログラムによって行われるすべての計算を記述する単一のモデル、関数適用があります。Lisp + 演算子は、自分で定義できるものと同じように関数です。実際、特殊フォームと呼ばれる少数の演算子を除いて、Lisp のコアは Lisp 関数の集合です。このコレクションに追加するのを妨げているものは何ですか? Lisp に何かしてほしいと思ったら、それを自分で書くことができ、新しい関数は組み込み関数と同じように扱われます。
+
私の質問は、次の特殊な演算子を使用して、演算子のようなものをどのように実装するのでしょうか? それとも、実際にはもっと多くの演算子が使用されており、Graham は不正確で劇的なだけなのでしょうか?
これらの関数のソース コードを表示する方法はありますか?