Lisp语言学习记录(初学者)

Lisp,好晦涩的语言啊.............

一、函数

      定义函数语法:

     (defun name (parameter*)

          "optional documentation string."

           body-form*)           -------------注:*代表可以多个

      最后一个表达式的值被作为整个函数的值返回;

     RETURN-FROM特殊操作符可以从函数内部任意地方立即返回

     (defun foo (a b &optional c d) (list a b c d))------&optional后的2个参数C和D都是可选的,有点陷阱啊.

    -supplied-p检测调用时是否提供了实参,是则值为T,否则为NIL

              (defun foo (a b &optional (c 3 c-supplied-p)) (list a b c c-supplied-p)) -----(foo 1 2)  --->(1 2 3 NIL)

   &rest关键字之后是可选形参,即可以是任意个形参。(defun + (&rest number)...)

   &key关键字形参  (defun foo (&key a b c) (list a b c))  -----------(foo a:1 c:3)----->(1 NIL 3)

   (defun foo (&key (a 0) (b 0 b-supplied-p) (c (+ a b)))

   FUNCTION获得函数对象,别名写法:#'

   funcall---需要确切知道函数实参个数 (foo 1 2 3)=(funcall #' foo 1 2 3)

   apply----后面参数传递的是列表

   匿名函数----lambda

 

----------------------------------------------------国庆回家过节咯

二、变量

   词法变量-----局部变量;动态变量-----全局变量

   同一个变量可以改变其类型,变量没有类型,数值有类型;

   引入变量的方式:1、函数形参;2、LET及LET*

   LET及LET*区别,LET*后面变量可以引用早先引用的变量。如:

   (let* ((x 10)

           (y (+x 10)))

   (list x y))

 

三、数据结构

 quote(')保证随后的表达式不被求值

 list------创建列表

       cons------构造列表

       car---------取第一个元素

       cdr---------取第一个元素之后的所有元素

逻辑值

       任何非nil的东西,在逻辑上均为真

类型

      对象总是不止属于一个类型。举例来说,数字 27 的类型,依普遍性的增加排序,依序是 fixnumintegerrational realnumberatom t 类型

     typep------判断一个对象是否属于某个类型 (typep 27 'integer)

 

----------------------------------------------

可恶的LISP,原来你只是擅长写编译器啊,怪自己没仔细审视。

以后有时间再学习吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值