有没有人知道如何在Scheme中使用这两个(?x生活?城市)进行模式匹配(约翰生活在纽约)?
我尝试过使用match-define,但是我没有成功。
答案 0 :(得分:10)
我猜你的意思是模式匹配。对于这个问题的一般解决方案,考虑实现Unification Algorithm,SICP中描述了一个完整的工作解决方案。或者,考虑在代码中嵌入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