欢迎来到Lisp

2016-12-13  本文已影响0人  Saru様

0. Lisp系统的交互式前端(REPL)


刚接触Lisp,会发现每种Lisp的实现都会带有REPL(read - eval - print -loop)。
这里记录一下REPL相关的说明及问题。

1. 形式(Form)


Lisp中使用S表达式进行程序的书写。通过左括号( 表示表达式开始,右括号 )表示表达式结束。
正式因为使用了这种表达式,所以Lisp的语法十分简单,因为除了像1这种原子外,都是括号中的表达式。

2. 求值(Evaluation)


Lisp使用前缀表达式,类似(+ 1 2)这种形式。括号内的第一个元素是函数,后面的就是函数的参数。

Lisp中使用quote作为一种保护表达式不被求值的方式,quote也可以缩写为'

3. 数据(Data)


Lisp提供了在其他预言中找的到的及找不到的数据类型。如,整数(integer)、字符串(string)等其他语言中可以找到的数据类型。还有如,符号(symbol)与列表(lists)等,在其他语言中找不到的数据类型。

4. 列表操作(List Operations)


5. 真与假(Truth)


在Common Lisp中,t表示逻辑真nil表示逻辑假
将返回值逻辑真逻辑假的函数称为谓词(predicate)。所以谓词的名字通常以p结尾。

6. 函数(Functions)


使用defun定义新函数,Lisp不对程序(program)过程(procedure)函数(function)做区别。

7. 递归(Recursion)


函数自己调用自己称为递归

8.阅读Lisp(Reading Lisp)


使用缩进来阅读及编写程序,不要只盯着括号看。任何好的编辑器都会又括号匹配的功能。

9. 输入输出(Input and Output)


10. 变量(Variables)


11. 赋值(Assignment)


12.函数式编程(Functional Programming)


函数式编程意味着撰写利用返回值工作的程序,而不是修改程序中的某些东西。换言之,只使用函数的返回值,而不使用函数的副作用。

函数式编程允许使用交互式测试(interactive testing)

13.迭代(Iteration)


当想要重复做一些事情的时候,迭代比递归来的更自然。

14. 函数作为对象(Functions as Objects)


Lisp中,函数与符号、字符串一样是第一类对象。

15. 类型(Types)


在Common Lisp中,数值才是又类型的,而变量没有。
类型又fixnumintegerrationalreal、numberatomt
其中t是所有类型的基类(supertype)

习题(Exercises)


(defun our-get-fourth (lst)
        (car (cdr (cdr (cdr lst)))))
(defun our-max (first-num second-num)
      (if (> first-num second-num)
        first-num second-num))
  (defun our-list-element (lst)
    (if (null (car lst))
      nil
      (if (listp (car lst))
        t
        (our-list-element (cdr lst)))))
    (defun summit-second (lst)
       (let ((x (car lst)))
         (if (null x)
         0
         (if (numberp x)
           (+ x (summit-second (cdr lst)))
           (summit-second (cdr lst))))))
上一篇下一篇

猜你喜欢

热点阅读