(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