2008年1月4日金曜日

Chapter 5 Functions

前説

特になし。


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はクロージャを作らないのか?
クロージャは次章でやるとのことなので、そこで確認。

0 件のコメント: