lili对《Land of LISP》的笔记(1)

lili
lili (Hacking)

在读 Land of LISP

Land of LISP
  • 书名: Land of LISP
  • 作者: Conrad Barski M.D.
  • 副标题: Learn to Program in Lisp, One Game at a Time!
  • 页数: 504
  • 出版社: No Starch Press
  • 出版年: October 2009 (est.)
  • 第21页
    Lisp feature:
    1. function result is returned automaticall by called function.( retur... is not necessary in lisp)
    2.Symbols in Common Lisp are case-insensitive
    Clisp内置函数列表:ash (num offest) 把ash向左移动offset位。offset为正数时向左,为负数时向右移动。
    (1- variable) 把变量的值-1
    (1+ variable) return variable + 1 ;
    (/ var1 var2)
    (oddp var) var 是否是奇数
    (progn list1 list2 ...) 在只准一个语句的地方嵌套如多个语句,每个code语句都会被执行但只返回最后一个被执行语句的结果。
    (and ...) 逻辑于
    (or ... ) 逻辑或 (上面的and 和 or在执行中都是短路法 shortcut Boolean evaluation)
    (member find list) 在list中查找find,如果有返回由find,即find以后所有成员组成的list,若没有返回NIL。
    (eq va1 va2) 用于比较两个符号
    (eql ) 除了符号外还可比较数字和字符
    (equal ) 可以比较一切类型。
    (equalp ) 于equal相同但是还可用于比较不是严格相同的类型的值如 (equalp "Bob" "bob") (equalp 1.0 1)
    (= num1 num2) 用于比较数字可转换的值为相同(= 1.0 1)T
    (sting-equal str1 str2)不区分大小写
    (char-equal char1 char2) 不区分大小写
    backquto[`] 反引号在Lisp中和单引号的功能相似,也是声明为
    date mode,不同的是在【`】后的list中可以用逗号(comma)将,后紧接着的list从date mode切换到code mode。(filp 和flop 分别用作` 和,)
    #' 操作符时function 操作符的缩写(shorthand)形式。
    而之所以好在一个功能符号前加上#‘时因为怕解释器在有多个相同名字时不知到到底是哪个对象要执行。如
    (let ((car "hello"))
      (mapcar #'car '((one hello) (two hello))))
    
    #'将指明car不是第一局的变量car而是函数car。
    (append ...) 把几个list(data)联合(combine)成一个list。
    (apply func list)接收一个函数和一个list,他会吧list中的每一个元素分别开即每一个元素为一个单独对象,然后把这些单独对象传递给func中。
    (find item list) 在list中找寻item,若存在返回item,若没有返回nil
    我们也可以给find函数传递一个keyword参数。(在Common Lisp 中许多的函数都有一种内建的功能,就是可以在参数列表的最后给他们传递一个特别的参数)如:
    (find 'x '((x 1) (y 2) (z 3)) :key #'car)
    return:(x 1)
    
    后面的:key参数像一个谓词函数,他先执行返回的结果再被find函数要来查找 item,最后返回找到item的原始item。
    (push item list-variable's-list) 把item加(push)到list里。(加到一个变量列表的开头)
    (print data) 打印data到终端的单独一行。并且会在sting的最后留一个字符的空间。(即一个空格)
    (prin1 data) 只是打印data到终端不会为每一个string打印到独立的一行。
    (princ data) 按人类可以理解的方式打印出data。如:
    (princ '"foo") => foo
    (princ '#\b)   => b
    
    (eval var) 执行var里的data。
    Lisp conception
    1.form:对lisp中code列表的称呼。即一个list中的所有元素都将被视作code,compiler将会执行所有的元素。 如(expt 2 4)
    2.quoting:对lisp中data列表的称呼。即一个list中的所有元素都会别看做data,compiler不会执行他们。 要把一个list作为data list 即在list的最前面加上一个单引号。顾名思义叫做quoting。 如‘(expt 2 4)
    3.cons cells:指LIsp中的所有括号包围着的符号,数字,字符串。他的功能就是把所有的Lisp元素结合在一起,形成一个有机整体。逻辑上指的是数据结构中list的每一个节点。 对于cons 和 cells 维基百科上有更详细的解释。http://en.wikipedia.org/wiki/Cons 4homoiconic:A programming language that uses the same data structures to store data and program code is called homoiconic.维基百科上的解释http://en.wikipedia.org/wiki/Quasiquote
    Lisp
    defining a global variable
    (defparmeter *variable* init-value)
    defining a local varibale
    (let (variable declarations) ..body... )
    e.g (let ((a 1) (b 4))
    (+ a b) )
    declaring a global variable
    (defvar *variable* init-value)
    defining a global function
    (defun function-name (arguments) ...)
    defining a local function
    (flet ((function-name (arguments)
    ....function body........))
    ....block body..........)
    e.g (flet ((fun (n) (+ n 10)))
    (fun 7) )
    to make function names available in other defined function(can be called itself)
    (labels ((a (n)
    (+ a 5))
    (b (n)
    (+ (a n) 6)) )
    声明:大家如果发现上文有不对的地方,还请大家原谅。毕竟本人学识浅薄。英文又不行。欢迎大家批评指正哈。
    2011-05-29 23:32:42 1人喜欢 回应