2013-04-05 2 views

답변

8

패턴이 맞는 것 같습니다. 이 문제에 대한 일반적인 해결책은 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?city, 또는 #f의 일치 값리스트를 반환 (?x lives-in ?city) 패턴에 대한 주어진 식을 일치합니다.

+0

질문이 하나 있습니다. 구성표 패턴 일치가 통합 알고리즘을 사용하여 구현 되었습니까? 필자에게 Scheme Pattern Matching은 정말 강력하고 공식적인 측면을 이해하고 싶습니다. –

관련 문제