首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带约束的OCaml阶乘函数

带约束的OCaml阶乘函数
EN

Stack Overflow用户
提问于 2019-03-20 02:35:44
回答 1查看 189关注 0票数 -3

我正在尝试自学OCaml,并且我已经达到了命令式编程的程度。我发现了一个小小的练习,我完全不知道如何去接近它。这看起来很简单,但我想我的理解是不够的。

这个问题要求我在不使用rec关键字和不使用循环的情况下为factorial编写函数。它应该教我环境模型,但这也让我感到困惑。

我的第一个想法是尝试这样的东西:

代码语言:javascript
复制
   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

但我不确定这是否可行。任何帮助都将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 04:23:48

您的代码有点奇怪和错误,但基本思想是可行的。一旦有了对int -> int类型函数的引用f,就可以在后面的代码中自由使用!f。实际上,您可以指定f,这样它就可以引用使用!f的函数。这等同于递归,但它使用了OCaml的命令性部分。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55247904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档