我在Coq中定义了以下归纳类型。
Inductive natlist : Type :=
| nil : natlist
| cons : nat -> natlist -> natlist.
Notation "x :: l" := (cons x l) (at level 60, right associativity).
Notation "[ ]" := nil.
Notation "[ x , .. , y ]" := (cons x .. (cons y nil) ..).
natlist基本上是一个自然数列表(类似于Python中的列表)。我试图使用下面的定义找到两个natlist的联合。
Definition union_of_lists : natlist -> natlist -> natlist
即
Eval simpl in (union_of_lists [1,2,3] [1,4,1])
应该返回[1,2,3,1,4,1]
我有以下疑惑。
非常感谢任何帮助或提示。
答案 0 :(得分:1)
我自己找到了答案:)我做的是,我写了一个单独的Fixpoint函数append
,然后将其分配给union_of_lists
的定义。
Fixpoint append(l1 l2 : natlist) : natlist :=
match l1 with
| nil => l2
| (h :: t) => h :: app t l2
end.`
然后
Definition union_of_lists : natlist -> natlist -> natlist := append.
Eval simpl in (append [1,2,3] [1,2,3]) (* returns [1,2,3,1,2,3] *)
定义union_of_lists
返回一个函数,该函数将natlist
作为参数并返回另一个类型为natlist -> natlist
的函数(即函数采用natlist
参数并返回{{ 1}})。
natlist
的这个定义类似Functional Programming中的函数,可以返回函数或值。