小编典典

如何在 ghci 中跨多行定义函数?

all

我正在尝试在 ghci 中定义任何跨越多行的简单函数,以以下为例:

let abs n | n >= 0 = n
          | otherwise = -n

到目前为止,我已经尝试在第一行之后按 Enter:

Prelude> let abs n | n >= 0 = n
Prelude>           | otherwise = -n
<interactive>:1:0: parse error on input `|'

我也尝试使用:{and:}命令,但我没有走远:

Prelude> :{
unknown command ':{'
use :? for help.

我在 Linux 上为 Haskell 98 使用 GHC Interactive 6.6 版,我缺少什么?


阅读 107

收藏
2022-07-30

共1个答案

小编典典

对于守卫(如您的示例),您可以将它们全部放在一条线上并且它可以工作(守卫不关心间距)

let abs n | n >= 0 = n | otherwise = -n

如果您想编写具有参数模式匹配的多个定义的函数,如下所示:

fact 0 = 1
fact n = n * fact (n-1)

然后您将使用带有分号的大括号分隔定义

let { fact 0 = 1 ; fact n = n * fact (n-1) }
2022-07-30