2020-03-28lisp学习-19

86/ &optional之后的参数都是选择性的,缺省为nil:

有的参数可以被忽略,并可以缺省设成特定的值。这样的参数称为选择性参数(optional parameters)。(相比之下,普通的参数有时称为必要参数「required parameters」) 如果符号&optional出现在一个函数的形参列表时。

1 > (defun philosoph (thing &optional property);;;缺省
  (list thing 'is property))
PHILOSOPH
1 > (philosoph 'death)
(DEATH IS NIL)
1 > (defun philosoph (thing &optional (property 'fun));;;参数fun
  (list thing 'is property))
PHILOSOPH
1 > (philosoph 'death)
(DEATH IS FUN)


87/ &key放在一个形参列表,那在&key之后的形参都是选择性的。

此外,当函数被调用时,这些参数会被识别出来,参数的位置在哪不重要,而是用符号标签(译注::)识别出来:

1 > (defun keylist (a &key x y z);;;函数名及形参
    (list a x y z));;按序排列
KEYLIST
1 > (keylist 1 :y 2);;;a为1,:之后为选择值,即y值为2
(1 NIL 2 NIL);;按函数定义好的序列排列数值,无值得默认为nil

1 > (keylist 1 :y 3 :x 2);;;a为1,:之后为选择值,即y值为3,x值为2
(1 2 3 NIL)
1 > (keylist 1 :Z 9 :y 3 :x 2 );;;a为1,:之后为选择值,即y值为3,x值为2,z为9
(1 2 3 9)

88/ single?,当实参是只有一个元素的列表时,返回真。自定义函数

1 > (defun single? (lst)
  (and (consp lst) (null (cdr lst))))
SINGLE?
1 > (single? '(a))
T
1 > (single? '(a b))
NIL

89/ append1和cons很像,但在列表后面新增一个元素,而不是在前面:

1 > (defun append1 (lst obj)
  (append lst (list obj)))
APPEND1
1 > (append1 '(a b c) 'd);;在列表后面新增一个元素,末位实参不为列表
(A B C D)
1 > (cons 'd '(a b c) );;在列表前面新增一个元素,末位实参必须为列表
(D A B C)

其他

1 > (append1 '(a b c) '(d 7));;末位若为列表,则整体作为一个实参并入新列表
(A B C (D 7))
1 > (cons '(a b c) 'd );末位若为一个元素,则与前列表构成一个数组
((A B C) . D)

90/ map-int,接受一个函数与整数n,并返回将函数应用至整数0到n-1的结果的列表。

1 > (defun map-int (fn n)
  (let ((acc nil))
    (dotimes (i n)
      (push (funcall fn i) acc))
    (nreverse acc)))
MAP-INT
1 > (map-int #'identity 10);;接受一个函数与一个整数,结果返回整数以下从0到n-1的列表
(0 1 2 3 4 5 6 7 8 9)
1 > (map-int #'identity 6)
(0 1 2 3 4 5)

1 > (map-int #'(lambda (x) (random 100))
           10)
(51 45 90 49 72 40 26 38 72 23);;产生10个随机数

91/ RANDOM产生随机数,从0~n-1中

1 > (random 100)
77;;;随机数
1 > (random 100)
72;;随机数
1 > (random 100)
17;;随机数


92/ filter接受一个函数与一个列表,将函数应用至列表元素上时,返回所有非nil元素

4 > (defun filter (fn lst)
  (let ((acc nil))
    (dolist (x lst)
      (let ((val (funcall fn x)))
        (if val (push val acc))))
    (nreverse acc)))
FILTER
4 > (filter #'(lambda (x)
              (and (evenp x) (+ x 10)));;;函数,作用是偶数,+10,并存储
          '(1 2 3 4 5 6 7));;;从此列表中选出偶数
(12 14 16)

93/ most,根据某个评分函数(scoring function),返回列表中最高分的元素。它返回两个值,获胜的元素以及它的分数:

4 > (defun most (fn lst)
  (if (null lst)
      (values nil nil)
      (let* ((wins (car lst))
             (max (funcall fn wins)))
        (dolist (obj (cdr lst))
          (let ((score (funcall fn obj)))
            (when (> score max)
              (setf wins obj
                    max  score))))
        (values wins max))))
MOST
4 > (most #'length '((a b) (a b c r y 6 7) (a)));;返回最长的列表和其元素个数
(A B C R Y 6 7)
7

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容