2013-04-05 55 views
2

有沒有人有一個想法如何在這兩個(?x住在?城市)(約翰住在紐約)在計劃模式匹配?如何在Scheme中進行模式匹配?

我試過使用匹配定義,但我沒有成功。

+2

您正在與哪些計劃合作?雞,球拍等? – 2013-04-05 13:49:29

回答

8

我猜你的意思是模式匹配。對於這個問題的一般解決方案,考慮實施Unification Algorithm,在SICP中描述了一個完整的工作解決方案。或者,考慮在代碼中嵌入miniKANREN,這是一個簡單的邏輯編程系統,可與Scheme協同工作。

現在,對於更簡單的比賽,您可以使用球拍的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如果沒有找到匹配。

+0

我有一個問題。方案模式匹配是否使用統一算法實現?對我來說,Scheme Matching方案非常強大,我想了解它的正式方面。 – 2013-10-18 14:48:46