我正在尝试自学OCaml,并且我已经达到了命令式编程的程度。我发现了一个小小的练习,我完全不知道如何去接近它。这看起来很简单,但我想我的理解是不够的。
这个问题要求我在不使用rec关键字和不使用循环的情况下为factorial编写函数。它应该教我环境模型,但这也让我感到困惑。
我的第一个想法是尝试这样的东西:
let factorial =
let f = ref (fun n -> 0) in
let temp_factorial n =
if n = 0
then 1
else
begin
f := n * !f*(n-1)
!f
end
但我不确定这是否可行。任何帮助都将不胜感激:)
发布于 2019-03-20 04:23:48
您的代码有点奇怪和错误,但基本思想是可行的。一旦有了对int -> int
类型函数的引用f
,就可以在后面的代码中自由使用!f
。实际上,您可以指定f
,这样它就可以引用使用!f
的函数。这等同于递归,但它使用了OCaml的命令性部分。
let f = ref (fun n -> n + 1)
f :=
(fun n ->
if n < 2 then 1
else (* ... left as an exercise ... *)
)
let factoral n = !f n
关键是部件left as an exercise
可以使用!f
。
https://stackoverflow.com/questions/55247904
复制相似问题