How to do Pattern Matching in Common Lisp

走远了吗. 提交于 2019-12-03 04:32:55

问题


I have no idea if there exists a pattern matching function for Common Lisp, nevertheless I have to make my own function. I have no idea about Lisp. Can somebody give heads-up on learning Lisp and most importantly, how to go about doing pattern matching in Lisp. I will have to pass a pattern and a fact and say if they match. An example would be

(heroes (hitpoints=hp) (mana=m)) 

should match

(Morphling (hitpoints 435) (mana 260))

it should also be able to also do numeric comparisons of if a number is greater or lesser. Like if another heroes mana is less that Morphling.


回答1:


Simple pattern matching functionality is explained in various Lisp books.

  • Lisp, 3rd edition, Winston/Horn

  • Paradigms of Artificial Intelligence Programming, Case Studies in Common Lisp, Peter Norvig

and others.

Above books explain implementing pattern matching in Lisp very well.

Libraries exist, for example cl-match, Optima and various others.




回答2:


I think you may want the CL-Unification library: http://common-lisp.net/project/cl-unification/




回答3:


I don't want to short circuit any learning you need to do for school (if that is the context in which this project is necessitated), but you could study the cl-ppcre library, http://weitz.de/cl-ppcre/, to see how an experienced Lisper does it. You could download the source and study it to understand. I would also second the book by Norvig, http://norvig.com/paip.html, mentioned above. You can learn so much from that book.



来源:https://stackoverflow.com/questions/3798617/how-to-do-pattern-matching-in-common-lisp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!