2014-10-06 2 views
1

의 구현 sicp에서 패턴 일치를 이해하려고합니다. https://www.youtube.com/watch?v=amf5lTZ0UTc&list=PL8FE88AA54363BC46&index=7패턴 일치 -?,? c,? v

그는 패턴 규칙에서 이러한 3 가지 절차를 만들었지 만 구현은 없습니다.

여기에 대한 설명이 있습니까?

패턴 매칭 -???, C의 구현, V

https://github.com/f03lipe/sicp-code/blob/master/code/4A.scm

foo  - matches exactly foo 
(f a b) - matches list in which first element if f, second is a, third is b 
(? x)  - matches anything, call it x 
(?c x) - matches constant, call it x 
(?v x) - matches variable, call it x 

(define deriv-rules 
    '(
     ((dd (?c c) (? v))   0) 
     ((dd (?v v) (? v))   1) 
     ((dd (?v u) (? v))   0) 

또는 이러한 평가되고 단지 규칙이 있기 때문에 더 구현이 전혀 없다?

+0

foo와 (f a b) 만 일치한다는 것이 무엇을 의미하는지 어떻게 이해할 수 있습니까? – runners3431

+0

교수가 foo가 foo와 일치한다고 말하면 * 또는 +와 같은 의미가 정확히 무엇인지 의미합니까? – runners3431

답변

1

그들은 실제로 절차가 아닙니다. 그것들은 임의의 상수와 임의의 변수 등을 나타내는 구문의 일부입니다. 그래서 경기 절차에. 동영상의 분 35에 다음과 같이 볼 수 있습니다.

((ARBITRARY-CONSTANT? pat) 
(if (CONSTANT? exp) 
    (extend-dict pat exp dict) 
    'failed)) 
((ARBITRARY-VARIABLE? pat) 
(if (VARIBLE? exp) 
    (extend-dict pat exp dict) 
    'failed)) 
((ARBITRARY-EXPRESSION? pat) 
(extend-dict pat exp dict)) 

여기에서이 구문을 평가합니다. 이를 바탕으로 간단하게 절차를 다음과 같이 정의 할 수 있습니다 :

개미 기본적으로 그 것입니다. 이러한 패턴을 추상화하는 데 사용되므로 일치 절차를 변경하지 않고 나중에 구문을 변경할 수 있습니다.

+0

비디오에서 설명하는 방식이 너무 추상적 인 것처럼 보입니다. 이 패턴 매치를 배우는 방법을 이해하는 쉬운 방법이 있습니까? – runners3431

+0

@ runners3431 일반적인 패턴 일치 또는이 구체적인 예를 의미합니까? 너 이해 하지마? – Rptx

+0

rptx : 파생 규칙이 기호 인용을 사용한 목록에 불과하다는 것을 이해하지 못했습니다. 그래서 나는 차를 가져 가거나 규칙을 해석해 파문을 일으킬 수 있습니다. – runners3431