我试图了解sicp中的模式匹配。 https://www.youtube.com/watch?v=amf5lTZ0UTc&list=PL8FE88AA54363BC46&index=7
他在模式规则中创建了这三个程序,但没有实现。
这些有什么意义吗?
模式匹配 - 实现?,?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 :(得分: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))
这是评估此语法的地方。基于此,我们可以简单地将过程定义为:
(define (tagged-list? tag exp)
(eq? tag (car exp)))
(define (arbitrary-constant? pat) ; (?c c)
(tagged-list? '?c pat))
(define (arbitrary-variable? pat) ; (?v v)
(tagged-list? '?v pat))
(define (arbitrary-expression? pat) ; (? v)
(tagged-list? '? pat))
Ant基本上就是它。这些用于抽象模式,因此您可以稍后更改语法,而无需更改匹配过程。