多くのLISPにはFEXPRがありましたが、CLには含まれていませんでした。
これは、FEXRPが静的解析でうまく機能しないためです。
誰かがこれを説明できますか? Wikipedia article on FEXPRsからFEXPRがCommon Lispで放棄されたのはなぜですか?
答えて
:Lispと関数型プログラミングの1980年会議で
、ケント・ピットマン は、彼がマクロとfexprsの 長所と短所を議論した論文「Lispでの特殊フォーム」を発表しました最終的に がfexprsを非難しました。彼の中心的な反対は、fexprsを許すLispの方言では、静的解析は一般的に の演算子が通常の関数かfexprを表すかどうかを判断できないということでした。したがって、 静的解析は、オペランドが評価されるかどうかを判断できません。特に、 サブ式が安全に最適化できるかどうかはコンパイラが判断できません。サブ式は実行時に未評価のデータとして扱われる可能性があるためです。
ケント・ピットマンcalledコンパイルが不可能であると思われたので、fexprを放棄した。
fexprの詳細については、John N. Shuttの博士論文を参照してください。 Fexprs as the basis of Lisp function application or $vau : the ultimate abstraction
FEXPR
は、DEFUN
よりもDEFMACRO
よりもファーストクラスのオブジェクトになります。これは、何かがコンパイル時に関数かマクロであるかどうかを知ることができないため、コンパイル時に展開されないマクロが残っているため、コンパイラにとっては難しいようです。あなたはread the paper here with commentsすることができます。
これを読んだら、私たちのコンパイラが先進的な定数の折り畳みや他の最適化を行う方が優れているため、彼の結論がまだ真実であるかどうかは不明です。とにかく、上位マクロは、高次関数としてはあまり役に立ちませんので、あまり忘れてはいけません。
ポールGrahams Arc has anonymous macrosとkernel has them tooそれは完全に行っていないが、私は便宜のためだと思う。それにmap
を試してみると、それが役に立たないことがわかります。
- 1. なぜCommon LispのWebプログラムの実行ができない
- 2. Concoqtion(Coq + MetaOCaml) - なぜ放棄されましたか?
- 3. 関数定義(Clozure Common Lisp)をコンパイル中にマクロが評価されるのはなぜですか?
- 4. Git - origin/master diverged - 放棄されたコミットを放棄
- 5. Common Lispでの循環リスト
- 6. Common Lispのクラスイントロスペクション
- 7. 放棄された約束はどうなりますか?
- 8. Common Lispの豊富なプログラミング?
- 9. ページングされたメディアモジュールは放棄されましたか?
- 10. Common Lispの "functorの不正な引数"とは何ですか?
- 11. ライターが破棄されたときにストリームが破棄されるのはなぜですか?
- 12. Common Lisp Memory Issues
- 13. Common Lisp用ベクターグラフィックスライブラリ
- 14. ステップEval Common Lisp
- 15. DBコンテキストが廃棄されるのはなぜですか?
- 16. php ftpで放棄されたダウンロードを再開しますか?
- 17. Luaで放棄されたメモリリークを追跡する方法は?
- 18. WebApp(Tomcat-jdbc)プールされたDB接続の放棄例外を放棄
- 19. Common LispでHTTPクッキーを読むには?
- 20. 変数はCommon Lispのlet変数で定義されていますか?
- 21. 放棄されたメモリ、リーク、ナビゲーションコントローラ
- 22. なぜ表セルが解放されないのですか?
- 23. ソースコードlisp(Common Lisp、Scheme、Clojure)の美人
- 24. Common Lisp:ネストされたplistを効率的に追加する
- 25. Common Lisp let関数
- 26. Common Lispラムダ式エラー
- 27. Common Lisp Unbound変数
- 28. common lisp function/macro aliases
- 29. Common Lisp vs. MacLisp/InterLisp
- 30. Common Lisp並列プログラミング
私はあなたが実際のプログラミング問題についての質問をStackoverflowに投稿すれば個人的に好きです。プラスあなたの質問は間違っています: '統計分析' - それは何ですか?また、Common LispはFEXPRを「放棄」しませんでした。彼らはCLが存在する前に流行っていた。 –