有没有办法在Oz中存储函数/过程调用?

时间:2012-04-19 15:45:29

标签: functional-programming higher-order-functions oz mozart

我想知道是否有办法在Oz中的变量中绑定整个函数调用。 例如,我有:

fun {F1 A1 A2} 
    A1+A2 
end

和局部变量X

我想要做的是,将调用(原样){F1 1 2}存储在X中,而不是结果:3,以便 我可以通过某种方式再次呼叫{F1 1 2}。{/ 1}。

这可能在奥兹吗?如果是这样,怎么样?

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

最简单的方法是动态创建一个不带参数的函数,例如

fun {CreateCall F A1 A2}
   fun {$}
      {F A1 A2}
   end
end

fun {F A1 A2}
   A1 + A2
end

C = {CreateCall F 1 2}

{Show {C}}

函数CreateCall创建并返回一个匿名的nullary函数,该函数使用给定的参数调用F. (这种技术类似于Haskell等语言中的部分功能应用。)

可以使用库函数Procedure.applydoc)将此概括为任意数量的参数。如果你想这样做并需要帮助,请告诉我。