OCaml中的键入推理帮助
问题描述:
我将如何继续证明这两个函数的输入是否正确?我对这个问题有点失落。OCaml中的键入推理帮助
let rec reduce f lst u =
match lst with
| [] -> u
| (h::t) -> f h (reduce f t u)
let rec forall2 p l1 l2 =
match (l1,l2) with
| ([],[]) -> true
| ([],_) -> false
| (_,[]) -> false
| ((h1::t1),(h2::t2)) ->
(p h1 h2) && (forall2 p t1 t2)
答
因为这个问题看起来像一个任务,我不会给一个完全成熟的解决方案。
要自己做类型推理,你所要做的就是查看源代码并作出扣除。然后,从你的推论中,推断出越来越多的类型,直到所有类型都是已知的,或者直到你找到了差异。
为了让你开始:
- 在
reduce
,你的模式匹配lst
对'a list
型的模式。因此,lst
必须键入为'a list
。 - 每个图案之后的值必须具有相同的类型,因此
u
与f h (reduce f t u)
具有相同的类型。
的Etcætera等cætera...
你说的 “证明使用类型推断功能” 是什么意思?你有任务来证明这些功能是手工打印的吗? – camlspotter
是的,我需要证明他们是否打得很好,但我很难从哪里开始,或者需要一个例子来解决问题。 – user3460123
从基础案例和已知类型开始,然后从那里往回走。 – glennsl