您的位置:首页 > 其它

CLTL2中关于Lambda-EXpress参数关键字的一些例子

2007-07-04 14:06 507 查看
 (1) Examples of &optional and &rest parameters:

 

((lambda (a b) (+ a (* b 3))) 4 5) => 19
((lambda (a &optional (b 2)) (+ a (* b 3))) 4 5) => 19
((lambda (a &optional (b 2)) (+ a (* b 3))) 4) => 10
((lambda (&optional (a 2 b) (c 3 d) &rest x) (list a b c d x)))
=> (2 nil 3 nil nil)
((lambda (&optional (a 2 b) (c 3 d) &rest x) (list a b c d x))
6)
=> (6 t 3 nil nil)
((lambda (&optional (a 2 b) (c 3 d) &rest x) (list a b c d x))
6 3)
=> (6 t 3 t nil)
((lambda (&optional (a 2 b) (c 3 d) &rest x) (list a b c d x))
6 3 8)
=> (6 t 3 t (8))
((lambda (&optional (a 2 b) (c 3 d) &rest x) (list a b c d x))
6 3 8 9 10 11)
=> (6 t 3 t (8 9 10 11))

(2) Examples of &key parameters:

 

((lambda (a b &key c d) (list a b c d)) 1 2)
=> (1 2 nil nil)
((lambda (a b &key c d) (list a b c d)) 1 2 :c 6)
=> (1 2 6 nil)
((lambda (a b &key c d) (list a b c d)) 1 2 :d 8)
=> (1 2 nil 8)
((lambda (a b &key c d) (list a b c d)) 1 2 :c 6 :d 8)
=> (1 2 6 8)
((lambda (a b &key c d) (list a b c d)) 1 2 :d 8 :c 6)
=> (1 2 6 8)
((lambda (a b &key c d) (list a b c d)) :a 1 :d 8 :c 6)
=> (:a 1 6 8)
((lambda (a b &key c d) (list a b c d)) :a :b :c :d)
=> (:a :b :d nil)

(3) Examples of mixtures:

 

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
1)   => (1 3 nil 1 ())

 

 

 

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
1 2)   => (1 2 nil 1 ())

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
:c 7)   => (:c 7 nil :c ())

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
1 6 :c 7)   => (1 6 7 1 (:c 7))

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
1 6 :d 8)   => (1 6 nil 8 (:d 8))

((lambda (a &optional (b 3) &rest x &key c (d a))
(list a b c d x))
1 6 :d 8 :c 9 :d 10)   => (1 6 9 8 (:d 8 :c 9 :d 10))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lambda rest list c parameters