Lisp における関数オブジェクトとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > Lisp における関数オブジェクトの意味・解説 

Lisp における関数オブジェクト

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:18 UTC 版)

関数オブジェクト」の記事における「Lisp における関数オブジェクト」の解説

Lisp においても、関数は、文字列やベクトル・リスト・数値同様に変数入れた関数から返したりできる第一級オブジェクトであり、第一級関数を扱うことができる言語である。 Lisp はその最初から (lambda ...) という特殊形式による関数リテラルはじめとして第一級関数を扱うことができる言語であったが、1960年代から1970年前後までの実装では、動的スコープのためクロージャはなっておらず、funarg問題en:Funarg problem)が認識されることとなったScheme で、静的スコープと無限エクステントメモリ上のオブジェクト参照されている限り生存し続ける)による解決示されCommon Lispはじめとする現代的な Lisp多く静的スコープ採用しており、lambda 特殊形式ではクロージャ作られる。しかし Emacs Lisp のように動的スコープLisp もまだ広く残っている。 Scheme では変数関数名前空間分かれておらず、変数名関数名同様に使ってプログラム書くことができる。 (define (hello s) (print (format "hello, ~a" s)) )(hello "world")(let ((f hello)) (f "Scheme") ) これを実行すると、 hello, worldhello, Scheme のように出力される。 これに対し伝統的な Lisp多くCommon Lisp変数関数名前空間分かれている。同様のプログラムCommon Lisp書いた例を示す。 (DEFUN HELLO (S) (PRINT (FORMAT NIL "hello, ~A" S)) )(HELLO "world")(LET ((F #'HELLO)) (FUNCALL F "Common Lisp") ) これを実行すると、 hello, worldhello, Common Lisp のように出力されるCommon Lisp では、名前に対して変数としての値と、関数とが別々に結びつけられていて、文脈により(カッコ内の並び先頭にあるか、そうでないかにより)どちらかアクセスされる。F という変数関数値束縛する所では、通常の文脈において関数アクセスするために #' を名前の前に付けている。一方並び先頭位置に、この例では F と書いても、その名前の関数がないというエラーになる。Common Lisp では一般に、FUNCALL か APPLY 関数使って呼び出す。 変数関数名前空間分けるか同じにするか、という議論は、Lisp限らず現代的なプログラミング言語設計において話題になるML などの現代的な関数型言語では当然のように同じ名前空間である。スクリプティング言語では、PythonJavaScript は同じ名前空間としたが、Ruby ではローカル変数メソッド別の名前空間とした。Lisp では「Lisp-1 対 Lisp-2 の議論」などと呼ばれるen:Common Lisp#The function namespace参照)。

※この「Lisp における関数オブジェクト」の解説は、「関数オブジェクト」の解説の一部です。
「Lisp における関数オブジェクト」を含む「関数オブジェクト」の記事については、「関数オブジェクト」の概要を参照ください。

ウィキペディア小見出し辞書の「Lisp における関数オブジェクト」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Lisp における関数オブジェクト」の関連用語

Lisp における関数オブジェクトのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Lisp における関数オブジェクトのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの関数オブジェクト (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS