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)                          
>              我不知道錯在哪裏呢,如果你知道告訴我一聲哈呵呵,謝謝了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章