这几天我在学习OCaml,发现了这个:
OCaml 对于可以放在 let 记录右侧的内容有限制。像这个
let memo_rec f_norec =
let rec f = memoize (fun x -> f_norec f x) in
f;;
Error: This kind of expression is not allowed as right-hand side of `let rec'
其中,memoize 是一个函数,它接受一个函数并用 Hashtable 将其转换为记忆版本。显然 OCaml 对“let rec”右侧构造的使用有一些限制,但我不太明白,有人能解释一下吗?
允许受约束的表达式类型let rec
描述于第 8.1 节 https://ocaml.org/manual/letrecvalues.html手册的内容。具体来说,函数应用涉及let rec
不允许定义名称。
粗略摘要(取自该链接):
非正式地,可接受的定义类由那些定义的名称仅出现在函数体内或作为数据构造函数的参数的定义组成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)