(defun returnFirstCharacter(p)
(if (symbolp p) (char (symbol-name p) 0) nil)
)
(defun returnRestCharacters (p)
(let()
(intern (subseq(string p) 1))
)
)
(defun val (x a)
(cond ((null a) nil)
((equal (car(cdr a)) x) (cdr (cdar a)))
(t (val x (cdr a)))
)
)
(defun match (pattern data)
(cond
((equal pattern data) t)
((match2 pattern data nil))
(t nil)
)
)
(defun match2 (p d a)
(cond
((null p)(cond
((null a) t)
(t a)
)
)
((numberp p) (cond
((equal p d) t)
(t nil)
)
)
( (symbolp p) (cond
((alpha-char-p (returnFirstCharacter p))
(let()(if (equal p d) (match2 nil nil a) nil)))
((equal (returnFirstCharacter p) #\=)
(let()
(if (and (returnRestCharacters p) (null (val (returnRestCharacters p) a)))
(match2 nil nil (cons (
list = (returnRestCharacters p) d) a)
)
(let()
(if (and (returnRestCharacters p) (equal (val (returnRestCharacters p) a) (car d)))
(match2 (cdr p) (cdr d) a) nil)
)
)
)
)
)
)
( (listp p)
(cond
((equal (list-length p) (list-length d))
(let()
( if (equal p d)
(match2 nil nil a)
(let()
(append (match2 (car p) (car d) a)(match2 (cdr p) (cdr d) a))
)
)
)
)
)
)
)
)
我有match2被自己調用兩次。我希望遞歸調用發生。在match2的調用返回true或nil的時候 程序終止 我希望把控制權傳回給之前調用它的match2。如何從lisp函數返回控件
正如你所看到的,我已經兩次調用了match2。 (listp p)match2中的條件我需要做遞歸。怎麼做
我會建議先閱讀一下Lisp的基本介紹。如果沒有學習一些基礎知識,編程Lisp可能不會成功。這本書作爲一個基本的介紹是有用的:http://www.cs.cmu.edu/~dst/LispBook/book.pdf – 2010-09-28 05:16:55
它也不清楚以上是什麼,它應該做什麼。想象一下,發佈隨機奇怪格式化的Java代碼片段並向人們尋求幫助。 Lisp也不是關於「控制流」,而是關於計算價值的更多。這將在基本的Lisp介紹中介紹,參見上文。 – 2010-09-28 05:19:27