1. ホーム
  2. haskell

[解決済み] ghciで関数を複数行に渡って定義するには?

2022-04-20 18:29:15

質問

ghciで複数行にまたがる簡単な関数を定義しようとしているのですが、以下のような例があります。

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

今のところ、1行目の後にEnterを押してみています。

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

を使おうとしたこともあります。 :{:} コマンドを使うのですが、なかなかうまくいきません。

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

LinuxでHaskell 98用のGHC Interactiveバージョン6.6を使っていますが、何が足りないのでしょうか?

どのように解決するのですか?

あなたの例のような)ガードについては、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) }