隐含功能:currying和totality

时间:2016-02-07 07:15:48

标签: vdm-sl

在VDM-SL中指定隐式函数时,是否可以指定curried函数?在下面的test1和test2中是明确的uncurried和curried函数,而test3是一个隐式的uncurried函数。所有都被Overture接受。 test4是对一个隐含的curried函数的尝试,但它被Overture拒绝。

另外,有没有办法用隐式函数定义指定它应该是total?

module moduleName
  exports all
  definitions
  functions

  test1 : nat * nat +> nat
  test1 (arg1,arg2) == arg1+arg2;

  test2 : nat -> nat +> nat
  test2 (arg1) (arg2) == arg1+arg2;

  test3 (arg1:nat,arg2:nat) res:nat
  post res = arg1+arg2;

  test4 (arg1:nat) (arg2:nat) res:nat
  post res = arg1+arg2;

end moduleName

1 个答案:

答案 0 :(得分:2)

不,我担心curried函数仅用于显式函数定义。隐式定义没有部分/总指标。

(我刚才问我们为什么会有这种差异。这似乎与语言的历史有关:英语学校产生了隐含的功能,但没有学习,而丹麦学校则有明确的功能和干扰。他们应该真的协调 - 你的猜测语法可能就是结果。)