目錄
一,執行環境
2,本地互動執行環境
二,輸入輸出
1,輸入
2,輸出
三,變數
1,格式化輸出
2,變數賦值 setf
四,函式
1,無參函式
2,帶參函式
3,關鍵字形參
五,列表
1,表list、按下標取元素nth
2,解引用quote
3,屬性表plist、按key取元素getf
六,引用表示式求值eval
七,列表篩選 remove-if、remove-if-not
八,lambda表示式
九,巨集1,reverse反轉列表
2,巨集本文中,「得到」指的都是互動執行環境中得到的結果
(setf x (read))
這樣就把讀取到的內容賦給了x
(1)format
format有2個必須的引數,乙個是輸出位置,如 t 是標準輸出,乙個是輸出內容
**:(format t "hello, world!")
執行結果:hello, world!
(2)print
(print "hello, world!")
(3)write、write-line
(write "hello, world!")
(write-line "hello, world!")
(format t "~a " 10)
執行結果:10
(setf i 10)
(format t "i is: ~a " i)
執行結果:i is: 10
**:(defun outworld()
(write-line "hello, world!"))
(outworld)
執行結果:hello, world!
(defun myadd(a b)
(+ a b))
(print (myadd 2 3))
在形參列表前面加上&key,相當於傳入的是符號而不是其值,所以用法上有2個差異:
乙個是實參的順序可以變,乙個是引數有預設值nil,可以預設實參。
**一:
(defun mylist (&key a b c)
(list a b c))
(mylist :a 1 :b 2 :c 3)
得到:(1 2 3)
**二:
(mylist :b 2 :c 3 :a 1)
得到:(1 2 3)
**三:
(mylist :b 4)
得到:(nil 4 nil)
**四:
(mylist)
得到:(nil nil nil)
(setf mylist '(1 2 3))
(print (nth 2 mylist))
執行結果:3
nth是取元素,下標從0開始
lisp語言需要區分乙個列表是資料還是**,預設是**,需要解引用才會被視為資料。
解引用的常見方式:
(setf mylist '(1 2 3))
(setf mylist (quote(1 2 3)))
(setf mylist (list :a 1 :b 2 :c 3))
(print (getf mylist :a))
屬性表的用法和c++中的map差不多
**:(setf mylist '(1 2 a))
(print (nth 2 mylist))
執行結果:a
**:(setf mylist '(1 2 a))
(setq a "abcd")
(print (eval (nth 2 mylist)))
執行結果:"abcd"
**:(setf mylist '(1 2 a))
(setf b "abcd")
(setf a b)
(print (eval (nth 2 mylist)))
執行結果:"abcd"
(remove-if-not #'evenp '(1 2 3 4 5))
得到: (2 4)
其中evenp是判斷乙個數是不是偶數
(remove-if #'evenp '(1 2 3 4 5))
得到:(1 3 5)
(remove-if-not #'(lambda (x) (= 0 (mod x 2))) '(1 2 3 4 5))
其中的(lambda (x) (= 0 (mod x 2)))是乙個lambda表示式,含義和evenp一樣,判斷乙個數是不是偶數
(reverse '(1 2 3)
得到:(3 2 1)
(defmacro myreverse(x) (reverse x))
(myreverse ("abcd" t format))
執行結果:abcd
lisp不是函授型語言 LISP語言
拼音 lisp yuyan 外文 lisp 為非數值符號運算而設計的表處理語言。lisp是英文list processing 表處理 的縮寫。lisp語言是1960年j.麥卡錫在遞迴函式論基礎上首先設計出來的。lisp語言的形式化程度高,表達力強,適合於描述各種知識和編寫問題求解的程式,因此一直是用...
Lisp語言 陣列
討論了變數以後讓我們來看看lisp中的陣列,對於非lisp程式設計師來講這是再自然不過的了,很多程式語言的教材上都是在講述了一般性語法後講解陣列。不過,lisp程式設計師可能會有點疑問,為什麼不開始介紹列表呢?列表作為lisp語言的關鍵在lisp中起到了重要的作用,所以很多有關lisp的材料都是以介...
Lisp語言 檔案操作
作為乙個基本功能,檔案操作對於大多數語言來講都是必須支援的,lisp語言和大多數語言一樣提供了檔案操作介面。在lisp中對檔案的操作通過函式open來實現,通過open函式開啟乙個檔案,然後通過read函式讀取檔案內容,或者通過format函式將資料寫入檔案中。函式open的第乙個引數是目標檔案的路...