Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写没有参数的Haskell函数的类型声明?_Haskell - Fatal编程技术网

如何编写没有参数的Haskell函数的类型声明?

如何编写没有参数的Haskell函数的类型声明?,haskell,Haskell,如何编写没有参数的haskell函数的类型声明?由于haskell中的函数是纯函数(它们的结果仅取决于它们的参数),因此没有参数的函数的等价物只是一个值。例如,one=1 没有没有没有参数的函数,它只是一个值。当然,你可以写这样的声明: five :: Int five = 5 如果我来的话,它看起来可能更像你要的 five' :: () -> Int five' () = 5 但这完全等同于(除非你写了一些可笑的东西,比如five'undefined)和superfluent1 如果

如何编写没有参数的haskell函数的类型声明?

由于haskell中的函数是纯函数(它们的结果仅取决于它们的参数),因此没有参数的函数的等价物只是一个值。例如,
one=1

没有没有没有参数的函数,它只是一个值。当然,你可以写这样的声明:

five :: Int
five = 5
如果我来的话,它看起来可能更像你要的

five' :: () -> Int
five' () = 5
但这完全等同于(除非你写了一些可笑的东西,比如
five'undefined
)和superfluent1

如果你的意思是,在C中

void scream() {
  printf("Aaaah!\n");
}
那又不是一个函数,而是一个动作。(C程序员确实称之为函数,但您最好说过程,每个人都会理解。)我上面所说的方法基本相同,您可以使用

scream :: IO()
scream = putStrLn "Aaaah!"
请注意,在这种情况下,空的
()
do与没有参数没有任何关系(这是由于没有
->
箭头而产生的),相反,它意味着也没有返回值,这只是一个“仅副作用”操作



1实际上,它在一个相关的方面有所不同:
five
是一个,这意味着它被记录下来了。如果我以某种迂回的方式定义了这样一个常数(例如,
sum$5:replicate 1000000
),那么即使在程序运行期间多次计算了
five
,冗长的计算也只会执行一次。OTOH,无论你在哪里写出
five'()
,计算都会重新进行。

我认为你需要更清楚地理解“无参数函数”的含义。你的意思是像
5
这样的
Int
类型的值,还是像
f=const 3
这样确实有函数类型但定义时没有任何显式参数的值?
f=const 3
有一个类型签名
f::b->Integer
。因此它有一个参数,它只是忽略了它。你可以称它为action或procedure,但从语法上讲,它只是一个函数,就像所有其他函数一样。是的,在我的例子中,我实际上想把一些副作用组合在一起,我想知道如何声明预期的返回类型。thanksIt在语法上几乎在所有编程语言中都是一个函数,但在Haskell中不是。在这里,函数有一个非常具体的含义——基本上是lambda抽象。如果某些东西不允许你将其应用于某个参数,那么它就不是一个函数。阅读。那么你应该用什么来代替呢?你怎么能在每个函数的作用域中放置一个值?@Max:在顶级声明的任何值都将在每个函数的作用域中,无需执行任何操作。(当然,对于那些不是函数的东西…@Infinity:如果没有看过参考视频,我想他们谈论的是一个定义。您可以通过使用组合运算符来定义函数,而无需显式提及任何参数。但是用这种方式定义的函数肯定也有参数,只是它们在定义中是隐式的。如果愿意的话,
f=(+1)
只是
fx=x+1
的语法糖:两者都用一个参数定义函数,但前者避免实际给它命名。