我正在尝试翻译以下代码:
(* elim: vname * term * (term * term) list * subst -> subst *)
and elim(x,t,S,s) =
if occurs x t then raise UNIFY
else let val xt = lift [(x,t)]
in solve(map (fn (t1,t2) => (xt t1, xt t2)) S,
(x,t) :: (map (fn (y,u) => (y, xt u)) s))
end;
从this repository转换为另一种语言。我的问题来了,因为我不确切知道(xt t1, xt t2)
的语义是什么
在ML。原则上xt,t1,t2
是术语,所以我认为xt t1
应该是某种连接(尽管没有定义连接)。
此代码在ML中意味着什么?
为了完整起见,这里是其他相关定义:
type vname = string * int;
type subst = (vname * term) list;
datatype term = V of vname | T of string * term list;
(* lift: subst -> term -> term *)
(* indom: vname -> subst -> bool *)
(* solve: (term * term)list * subst -> subst *)
答案 0 :(得分:1)
并置是功能应用。
(a,b)
是一对。
从lift
的类型可以看出,lift [(x,t)]
- 即xt
- 是一个函数term -> term
。
因此,(xt t1, xt t2)
是一对term * term
,其第一个元素是将xt
应用于t1
,其第二个元素为xt
的结果到t2
。