[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:04422] Re: xyzzy Reference



服部さん、こんにちは。山本です。


 In message "[xyzzy:04403] Re: xyzzy Reference"
 HATTORI Masashi <hattori@xxxxxxxxxxxxxxxx> wrote:

> ちょっとへなちょこな私の手には余るのでどなたか説明書いて頂
> けるとありがたいんですが…。_(__)_

時間があったので lambda だけ書いてみました。
declaration はよく分かりません。確認してませんが、xyzzy には無いかも?

ちなみに、まだ倍風館のLISP本の1冊目の半分くらいしか読んでないので、
へなちょこでは、負けません。:)
あと、XML も適当ですが、よければ使ってやってください。m(__)m



<chapter>
<title>lambda</title>
<type>Misc</type>
<arguments>lambda-list docmentation-string body</arguments>
<package>lisp</package>
<description>
  関数に名前を付ける必要がなく、手続きだけを記述したい場合にラムダ式
  を用いる。ラムダ式の二番目の引数はラムダリストと呼ばれ、関数の
  パラメータの名前を与える。lambda式のより完全な構文は以下である。

  (lambda ({var}*
           [&optional {var | (var [initform [svar]])}*]
           [&rest var]
           [&key {var | ({var | (keyword var)} [initform [svar]])}*
                      [&allow-other-keys]]
           [&aux {var | (var [initform])}*])
     [[{declaration}* | documentation-string]]
     {form}*)
  
  引数がラムダ式によって表される関数に適用されると、form が評価
  されて最後の form の結果が返される。form は並列に評価される。

  ((lambda (x y) (+ x y)) 10 20)        => 30
  
  ラムダリストの各要素は、パラメータ指定子や、記号&(アンパサンド)
  で始まるラムダリストキーワードからなる。ラムダリストは5つの部分で
  構成される。
  
  ・必須パラメータの記述
      ラムダリストキーワードよりも前に現れる var を必須パラメータという。
  
  ・オプショナルパラメータの記述
      &optionalから次のラムダリストキーワードまでか、ラムダリストの
      終わりまで。関数呼び出し時に、オプショナルパラメータに対応する
      引数はあっても無くてもよい。引数が省略された場合、initform が
      あれば initform に初期化され、無ければ nil で初期化される。
      svar は引数が与えられたかどうかを示す。
  
    ((lambda (x &optional (y 0 given))
         (if given (+ x y) x))
      10 20)
    => 30
  
  ・レストパラメータの記述
      &restとそれに続く一つのパラメータ指定子。関数への引数のうち、
      必須パラメータとオプショナルパラメータに対応するもの以外
      からなるリストが束縛される。
  
    ((lambda (x &optional (y 1) (z 2) &rest args)
         (list x y z args))
      'a 'b 'c 'd 'e 'f)
    => (a b c (d e f))
  
  ・キーワードパラメタの記述
      &keyから次のラムダリストキーワードまでか、ラムダリストの
      終わりまで。関数が呼ばれたときに対応する keyword に対応する
      パラメータ指定子 var に値を束縛する。
  
    ((lambda (x &key ((:test f) #'eq))
         (if (funcall f x "word") 'True 'False))
     "word" :test #'equal)
    => True
  
    ((lambda (x &key (test #'eq))
         (if (funcall test x "word") 'True 'False))
      "word" :test #'eql)
    => False
  
  ・補助変数の記述
      ラムダリストに &aux が含まれるなら、この後の全ての指定は
      補助変数の指定子である。次に示す二つの例は同じ結果を与える。
      これらの使用については純粋にスタイルの問題である。
    
    ((lambda (x &aux (l (length x)))
         (list x l))
      '(a b c))
    => ((a b c) 3)
    
    ((lambda (x)
         (let ((l (length x))) (list x l)))
      '(a b c))
    => ((a b c) 3)
</description>
<seealso>lambda-list-keywords</seealso>
<seealso>lambda-parameters-limit</seealso>
<section>プログラム構造</section>
<file></file>
</chapter>



-- 
山本真二           sinj@xxxxxxxxxxxx

Index Home