cen*_*980 3 haskell functional-programming currying
我有以下定理:(A?(B?C))?((A?B)?C),并且我试图确定其计算解释是什么。我有以下选择:
(1)将已咖喱函数转换为未咖喱函数的函数。
(2)将未修改的函数转换为已修改的函数的函数。
(3)该函数创建两个给定的A值和B值的元组。
(4)此逻辑公式没有计算解释。
我认为(1)或(2)都不正确,因为在Haskell中,所有函数都被视为咖喱。我认为选项(3)是正确的,因为(A?B)是转换为类型时的元组(A,B)。但是,我不确定我的推理是否正确。是否可以有一个curried函数,其中您使用前两个参数A和B,然后以某种方式将它们转换为元组,然后返回值C?任何见解都表示赞赏。
(A?B)是转换为类型时的元组(A,B)
这是对的。但这并不使(A?(B?C))?((A?B)?C)成为“创建两个给定A值和B值的元组的函数”。这样的函数将是A?B?(A?B)。
在Haskell中,所有功能均视为已咖喱
不,那不是很正确。语言本身没有定义如何表达具有多个参数的函数。它没有多参数函数的概念。是选择一次通过传递一个参数(已咖喱)还是通过元组(未咖喱)来表达多参数函数。这些约定对库和编译器设计有严重的影响,但是从语言本身的角度来看,选择是否使用curry并不重要。
A?(B?C)的计算解释是一个接受一个参数并返回接受第二个参数的函数,即以咖喱形式接受两个参数的函数。(A?B)?C的计算解释是一个函数,它接受一个参数对,即一对,即,两个参数以非咖喱形式出现。因此,(A→(B→C))→((A→B)→C)的计算解释是将咖喱函数从非咖喱形式转换为函数的函数。