Lisp関数編

703 views
621 views

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
703
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Lisp関数編

  1. 1. LISP 関数編 Satoshi Watanabe
  2. 2. 関数の定義 • defunを使って関数を定義できる • 引数は関数名、パラメータリスト、関数本体 (define our-third (x) (car (cdr (cdr x)))) 関数名 パラメータリスト 関数本体 実行結果 (our-third '(a b c d)) C
  3. 3. 関数はデータ • 関数はデータ • 引数に渡すことができる • apply 関数とその関数を適用する引数リストを引 数として、関数を引数リストに適用した結果を返す (apply #'+ '(1 2 3)) (+ 1 2 3)と同じ結果
  4. 4. lambda式 • defunは関数に名前をつける • 名前をつけずに関数そのものを表現 lambda (lambda (x y) (+ x y)) パラメータリスト 関数本体 ((lambda (x y) (+ x y)) 1 2) 3
  5. 5. 局所関数 • define で定義されるのは大域関数 • どこからでも参照可能 • 特定のコンテキストからしか参照できない局所 関数も定義可能 (labels ((add10 (x) (+ x 10)) (consa (x) (cons 'a x))) (consa (add10 3))) 局所関数 labels内でしか 参照できない
  6. 6. パラメータリスト • &rest • これ以降の引数は全て一つのリストになる • &optional • これ以降は全て省略可能 • &key • 順番ではなくシンボルによって値を設定可能
  7. 7. パラメータ &rest (defun our-funcall (fn &rest args) (apply fn args)) ここは一つのリストになる (our-funcall #'+ 1 2 3) (1 2 3) と扱う
  8. 8. パラメータ &optional (defun philosoph (thing &optional property) (list thing 'is property) ここは省略可能 省略するとデフォルト値nilになる (philosoph 'death) (DEATH IS NIL) (defun philosoph (thing &optional (property 'fun)) (list thing 'is property) このようにデフォルト値を 設定できる
  9. 9. パラメータ &key (defun keylist (a &key x y z) (list a x y z)) これらはすべてoptional (keylist 1 :y 2) (1 NIL 2 NIL) シンボルで引数の値を指定
  10. 10. クロージャ • 定義された時点で変数に値が設定され、その変 数を参照し続ける関数 • 関数と環境を一緒にしたもの (setf fn (let ((i 3)) #'(lambda (x) (+ x i)))) このfnは どこで使用しても 3を代入したiを参照し続ける (funcall fn 2) 5
  11. 11. クロージャ (defun add-to-list (num lst) (mapcar #'(lambda (x) (+ x num)) lst)) このnumはlambda式の外部で定義された (defun make-addr (n) #'(lambda (x) (+ x n))) このnをバインドして新しい関数を 作成するする

×