假設我有感應型算術表達式exp
格局Coq的單個子句中匹配多個構造
Inductive exp : Type :=
| num : nat -> exp
| plus : exp -> exp -> exp
| minus : exp -> exp -> exp
| mult : exp -> exp -> exp
| div : exp -> exp -> exp.
的,我想定義一個函數expsum
返回發生在一個exp
的所有數字的總和。最明顯的實現是
Fixpoint expsum (e : exp) : nat :=
match e with
| num n => n
| plus e1 e2 => expsum e1 + expsum e2
| minus e1 e2 => expsum e1 + expsum e2
| mult e1 e2 => expsum e1 + expsum e2
| div e1 e2 => expsum e1 + expsum e2
end.
但對於構造plus
,minus
,mult
,並div
,expsum
模式匹配後不完全一樣的東西。我想,這樣一個條款需要多個構造函數的照顧它簡化成類似
Fixpoint expsum (e : exp) : nat :=
match e with
| num n => n
| [ plus e1 e2 | minus e1 e2 | mult e1 e2 | div e1 e2 ]
=> expsum e1 + expsum e2
end.
。我想我已經看到這在其他功能語言中完成。這可能在Coq中嗎?