我对术语有以下定义:
Inductive term : Type :=
| Var : variable -> term
| Func : function_symbol -> list term -> term.
和一个函数pos_list
,它获取一个术语列表并为每个子术语返回一个“位置”列表。例如,[Var "e"; Func "f" [Var "x"; Func "i" [Var "x"]]]
我应该得到[[1]; [2]; [2; 1]; [2; 2]; [2; 2; 1]]
每个元素代表子项树层次结构中的位置的位置。
Definition pos_list (args:list term) : list position :=
let fix pos_list_aux ts is head :=
let enumeration := enumerate ts in
let fix post_enumeration ts is head :=
match is with
| [] => []
| y::ys =>
let new_head := (head++y) in
match ts with
| [] => []
| (Var _)::xs => [new_head] ++ (post_enumeration xs ys head)
| (Func _ args')::xs =>
[new_head] ++
(pos_list_aux args' [] new_head) ++
(post_enumeration xs ys head)
end
end
in post_enumeration ts enumeration head
in pos_list_aux args [] [].
使用上面的代码,我得到了错误
错误:无法猜测
fix
在第一个let fix
构造上,但在我看来,调用(pos_list_aux args' [] new_head)
(导致问题)将其作为参数args'
,该参数(Func _ args')
本身就是ts
.
怎么了 ?