【问题标题】:Does ocaml memoize recursive functionsocaml 是否记忆递归函数
【发布时间】:2016-03-21 05:44:03
【问题描述】:

想象一下,我有以下用 ocaml 编写的伪代码。

foo(n:int, d:int) = foo(n-1,d-1) + foo(n-1,d)
//Assume proper terminating conditions are added here

即它正在计算一个递归定义的函数。

以上不是尾递归。一个简单的实现也会导致大量冗余工作被完成(比如 foo(n-1,d) 计算会导致 foo(n-1,d-1) 被再次调用)

我知道我可以手动将其编写为动态编程问题。我对这里不感兴趣

我的问题是,如果我这样写,ocaml 会做一些整洁的事情,比如记忆节点,这样它们就不会被重新计算。还是其他一些我做梦也想不到的花哨的东西?

【问题讨论】:

    标签: ocaml memoization


    【解决方案1】:

    不,OCaml 不会对这段代码做任何花哨的事情。如果你想要记忆,你需要明确编码。

    除了将尾调用视为分支和小函数的内联之外,OCaml 还生成了您或多或少期望的代码。这可以说是它的优势之一(尽管您也可以称之为弱点)。

    【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2014-10-31
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多