lisp中的简单注意事项

           今天第一次上机,做lisp实验,题目其实都还是蛮简单的,最担心的还是要怎么把简单的实验用长达10页的英文表达出来,现在还么有着手写report,等我写完了报告,再上来给大家做总结,今天小小的写了程序,在这里把自己学到的小小的总结一下,以后看到这篇文章的时候还可以温故而知新呢呵呵。

           首先我们来看一个表达式:(cadadr '((a b e)(d e f))) 你知道运行的结果是什么吗?我们都知道car是返回表中的第一个元素,这个元素可以是个单个字母,也可以是一个list。cdr是返回list减去第一个元素,注意了返回的是list不是一个元素哦。我在看这个表达式子的时候都弄混了的。那再来看下一步一步的解:

首先执行cdr得到一个list如下:

> (cdr '(( a b c)( d e f)))       
((D E F))       

 再对这个list(是包含一个元素,该元素是个list)执行car操作得到一个元素,但是这个也是list :                
> (car '(( d e f)))               
(D E F)    

接下来再次执行cdr得到的list如下:                        
> (cdr '(d e f))                  
(E F)      

最后car操作得到结果如下所示:                       
> (car '(e f))                    
E

            其次我们要弄清楚cons和append的区别,他们的区别在于:cons是用来宽展list的,语法是:(cons 'a 'b),其中b应该是个list,当b不是list的时候我们得到的结果叫做dotted pairs.我们看下这两种结果:

> (cons 'a '(b))   
(A B)  

 

> (cons 'a 'b)
(A . B)                    

他们在书写上都是不一样的。append函数是用来联合两个list的,所以它的两个参数都是list。

> (append '(a b c) '(d e g))   
(A B C D E G)   

             再次给一个用递归写求阶乘算法,很简单的,大家一看就明白

 > (defun myf(n)(cond ((= n 0 )1)(t(* n (myf (- n 1))))))
MYF                                                     
> (myf 0)                                               
1                                                       
> (myf 3)                                               
6                                                       
> (myf 5)    ;这个是在调用函数参数是5,运行结果是120.                                           
120              

            最后给出一张今天晚上同学给我拍的相片哈哈,小小的自恋一下啦,明天继续看我的实验呢,算法和lisp的,我要加油啊,好好学习,天天向上呢。。。

            刚才写了个把list倒置递归算法的代码如下: 

 > (defun reverse(list)                                                       
                (cond ((= (length list) 0)"the list is empty")               
                       ((= (length list) 1)  list )                          
                       (t((cons '(car list) ())  (reverse (cdr list))))      
                 )                                                           
  )                                                                          
REVERSE                                                                      
> (reverse '(a b c))                                                         
error: bad function - (CONS (QUOTE (CAR LIST)) NIL)                          
>              我不知道错在哪里呢,如果你知道告诉我一声哈呵呵,谢谢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值