【问题标题】:How to do Pattern Matching in Common Lisp如何在 Common Lisp 中进行模式匹配
【发布时间】:2010-09-26 16:07:40
【问题描述】:

我不知道Common Lisp 是否存在模式匹配函数,不过我必须自己编写函数。我不知道 Lisp。有人可以提醒学习 Lisp,最重要的是,如何在 Lisp 中进行模式匹配。我将不得不传递一个模式和一个事实,并说明它们是否匹配。 一个例子是

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

应该匹配

(Morphling (hitpoints 435) (mana 260))

它还应该能够对数字更大或更小进行数字比较。就像其他英雄的法力值不如变体精灵。

【问题讨论】:

  • Paul Graham 的 On Lisp 中的出色描述(第 19 章,p246ff)

标签: lisp common-lisp


【解决方案1】:

各种 Lisp 书籍中解释了简单的模式匹配功能。

和其他人。

以上书籍很好地解释了在 Lisp 中实现模式匹配。

存在库,例如 triviacl-matchvarious others

【讨论】:

  • 我不能使用库函数。我必须自己制作。
  • @gizgok:使用 Winston/Horn 书学习 Lisp 是一个好的开始。奖励:它解释了实现模式匹配。
【解决方案2】:

我想你可能想要 CL-Unification 库:http://common-lisp.net/project/cl-unification/

【讨论】:

    【解决方案3】:

    我不想让你在学校需要做的任何学习短路(如果这是需要这个项目的背景),但你可以研究 cl-ppcre 库,http://weitz.de/cl-ppcre/,看看如何经验丰富的 Lisper 会做到这一点。您可以下载源代码并研究它以了解。我也会支持上面提到的 Norvig 的书,http://norvig.com/paip.html。你可以从那本书中学到很多东西。

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多