関数名前空間
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/15 19:06 UTC 版)
「Common Lisp」の記事における「関数名前空間」の解説
関数名のための名前空間は、データ変数のための名前空間とは分離されている。これは Common Lisp と Scheme における主要な違いである。defun、flet そして labels のようなオペレータは関数名前空間へ名前を定義する。 他の関数への引数として関数名を渡す場合には、function スペシャルオペレータ(通常 #' と略記される)を使う必要がある。最初の sort 引数では、関数名前空間にシンボル > で定義された関数名を #'> というコードで参照している。 Scheme の評価モデルはより単純で、単一の名前空間のみが存在し、引数部分だけでなくあらゆる位置で、評価順序を問わずフォームは評価される。この事が Common Lisp と Scheme のどちらかの方言で書かれたコードは、ときどき他方の経験を持つプログラマーを混乱させることになる。たとえば、Common Lisp プログラマーの多くは list あるいは string といった説明的な変数名を使用する事を好むが、これらの名称は Scheme ではローカルに関数名を上書きしてしまうという問題を起こすことになる。ただし、これには一長一短がある。名前空間が別れているために、高階関数などに渡す関数の名前は、そのままではなく、関数の名前であることを明示する必要が発生してしまっている。 関数に独立した名前空間を持つ事が利点かどうかは、LISP コミュニティにおける論争の源となっている。この論争は一般に「Lisp-1 vs. Lisp-2 の議論」と言われる。この用語は リチャード・ガブリエル と ケント・ピットマン らによる二つの手法を広範囲にわたって比較した 1988 年の論文で作られた。
※この「関数名前空間」の解説は、「Common Lisp」の解説の一部です。
「関数名前空間」を含む「Common Lisp」の記事については、「Common Lisp」の概要を参照ください。
- 関数名前空間のページへのリンク