如何在Scheme中进行模式匹配?

时间:2013-04-05 09:45:44

标签: scheme pattern-matching racket

有没有人知道如何在Scheme中使用这两个(?x生活?城市)进行模式匹配(约翰生活在纽约)?

我尝试过使用match-define,但是我没有成功。

1 个答案:

答案 0 :(得分:10)

我猜你的意思是模式匹配。对于这个问题的一般解决方案,考虑实现Unification AlgorithmSICP中描述了一个完整的工作解决方案。或者,考虑在代码中嵌入miniKANREN,它是一个与Scheme一起使用的简单逻辑编程系统。

现在,为了更简单的匹配,您可以使用Racket的Pattern Matching能力。对于问题中的示例:

(define expression '(john lives-in new-york))

(match expression
  [(list ?x 'lives-in ?city) (list ?x ?city)]
  [_ #f])

=> '(john new-york)

上述内容会根据(?x lives-in ?city)模式匹配给定的表达式,如果找不到匹配项,则返回包含?x?city匹配值的列表,或#f