前説
特になし。
Defining New Functions
特になし。
Function Parameter Lists
特になし。
Optional Parameters
特になし。
Rest Parameters
言語仕様で保証されているarityは50まで。
Keyword Parameters
特になし。
Mixing Different Parameter Types
特になし。
Function Return Values
DEFUN は、bodyを、関数名と同じ名前のblockで自動的に包む。
そこから、RETURN-FROMで脱出できる。
Functions As Data, a.k.a Higher-Order Functions
callbacks や hooks と呼んで、CPSとは言わない。
#'... って、(function ...) の省略形だったのか。
ただし、(#'+ 1 2) はエラー。
ちなみに、('+ 1 2)もエラー。
(funcall #'+ 1 2)はOK。
うーむ。
Anonymous Functions
なんと。
LAMBDA expressions は本来はそれ自体が評価対象となりえるものではなく、LAMBDAではじまるリストは、そのリスト総体で一種の関数名なのだそうな。
ISLISPとの互換性を保つために、LAMBDA macroが定義されて、それが(funcall (LAMBDA ... と展開されるようにした構文糖衣とのこと。
えーと、Schemeを理解する際に頭の中にあったlambdaとは、これは違う。どこかで考えてみる。
LAMBDAはクロージャを作るのに使われるとのこと。この言いっぷりからすると、DEFUNはクロージャを作らないのか?
クロージャは次章でやるとのことなので、そこで確認。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿