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

Vol*_*ian 4 scheme pattern-matching racket

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

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

Ósc*_*pez 10

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

现在,为了更简单的匹配,您可以使用Racket的模式匹配功能.对于问题中的示例:

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

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

=> '(john new-york)
Run Code Online (Sandbox Code Playgroud)

上述将匹配针对一个给定的表达(?x lives-in ?city)模式,与所匹配的值返回列表?x?city,或者#f如果没有找到匹配.