声明一个没有返回值的函数?

Jef*_*Yan -1 scheme haskell functional-programming

我们可以在函数式语言中创建一个带void(即没有返回值)的函数吗?像Haskell或Scheme

Mar*_*ann 7

在Haskell中,您可以编写一系列返回()(单元)的函数,这相当于voidC语言:

foo :: a -> ()
foo _ = ()

bar :: a -> b -> ()
bar _ _ = ()
Run Code Online (Sandbox Code Playgroud)

但是,你会注意到我的实现忽略了他们的输入,只是返回(),所以他们什么都不.

你可以像这样打电话给他们:

Prelude> foo 42
()
Prelude> bar 42 "foo"
()
Run Code Online (Sandbox Code Playgroud)

但这仍然没有完成任何事情.

另一方面,您可以编写返回的函数IO (),如下所示:

main :: IO ()
main = putStrLn "Hello, world!"
Run Code Online (Sandbox Code Playgroud)

但现在这是不纯的.虽然这会产生副作用,但你可以争论它是否有效.至少,在Haskell中,你不能从纯代码中调用不纯的代码(这是设计的),因此它不构成.


eps*_*lbe 5

这种功能的目的是什么?此外,如果你觉得一个数学函数(函数式编程的基础)的这将是这样一个函数的值域?

所以,简单的答案是没有在Haskell(我不知道够不够方案给出有关该知情答案)。

Haskell中的Java中最接近void的东西是 IO ()