Programming-in-Haskell-2nd-edition_memo_4
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[プログラミング Haskell 第 2 版 >Programming-in-Haskell-...
*プログラミング Haskell 第 2 版 [#e9055ceb]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top"><a...
}}
*第4章 関数定義 [#hdb2ac56]
p.40
**4.2 条件式 [#v7ad81c4]
>多くのプログラミング言語とは違って、Haskell の条件式には...
***ぶらさがり else 問題 [#edfb141d]
>これにより、いわゆる「ぶらさがり else 問題」が回避できま...
もし else部が省略可能な文であるなら、文「if True then if ...
-[[ぶらさがり else 問題 - Google 検索>https://www.google....
-ぶら下がりelse問題とは【Dangling else problem】 | MaryCo...
>ぶら下がりelse(Dangling else)は、特定のif文に紐付くよ...
この状態によって引き起こされる問題は宙ぶらりんelse問題(d...
#code{{
if (!a)
if (b)
b();
else // ← ぶら下がりのelse
a();
/* プログラム側ではこのように解釈されてしまう */
if (!a)
if (b)
b();
else
a();
}}
>ぶら下がりelseの問題は、フリーフォーマットを採用し、かつ...
オフサイドルールを採用して字下げのレベルに意味を持たせたP...
またブレースの記述を必須とするSwiftやGo, Rust等の言語も同...
Haskellの場合は、ifはelseを必須にすることによって、曖昧さ...
**4.3 ガード付きの等式 [#p1fc21d5]
>ガード付きの等式は、条件式と比べて、条件が多くなったとき...
たとえば、プレリュード関数 signumは以下のように定義すると...
-条件式
#code(haskell){{
signum :: Int -> Int
signum n = if n < 0 then -1 else
if n == 0 then 0 else 1
}}
-ガード付きの等式
#code(haskell){{
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
}}
p.41
**4.4 パターンマッチ [#i0e78eba]
>多くの関数は、パターンマッチを使うことで簡潔かつ直観的に...
パターンマッチによる関数定義では、パターンと呼ばれる式に...
もし最初のパターンに合致したら最初の結果、そうではなく二...
>たとえば、真理値の否定を返す否定演算子 notは、パターンマ...
#code(haskell){{
not :: Bool -> Bool
not False = True
not True = False
}}
***ワイルドカード [#wdd5ed7c]
>すべての値に合致するワイルドカード「_」
p.42
**4.4.2 リスト・パターン [#w114dc76]
***cons演算子 [#vdffda0f]
>これまでは Haskell のリストを分解不可能なデータとみなし...
実際には、リストは合成されたデータであり、空リスト []に対...
「:」は既存のリストの先頭に新しい要素を追加して新しいリス...
>たとえば、リスト[1,2,3]は以下のように分解できます。
[1,2,3]
1 : [2,3]
1 : (2 : [3])
1 : (2 : (3 : []))
>すなわち、[1,2,3]は 1 : (2 : (3 : []))の略記法にすぎませ...
リストを扱うときに括弧が増えないよう、cons 演算子は右結合...
たとえば、1 : 2 : 3 : []は 1 : (2 : (3 : []))という意味で...
p.43
>cons 演算子はリストの作成だけでなくパターンの作成にも利...
終了行:
[[プログラミング Haskell 第 2 版 >Programming-in-Haskell-...
*プログラミング Haskell 第 2 版 [#e9055ceb]
#html{{
<table border="0" cellpadding="5"><tr><td valign="top"><a...
}}
*第4章 関数定義 [#hdb2ac56]
p.40
**4.2 条件式 [#v7ad81c4]
>多くのプログラミング言語とは違って、Haskell の条件式には...
***ぶらさがり else 問題 [#edfb141d]
>これにより、いわゆる「ぶらさがり else 問題」が回避できま...
もし else部が省略可能な文であるなら、文「if True then if ...
-[[ぶらさがり else 問題 - Google 検索>https://www.google....
-ぶら下がりelse問題とは【Dangling else problem】 | MaryCo...
>ぶら下がりelse(Dangling else)は、特定のif文に紐付くよ...
この状態によって引き起こされる問題は宙ぶらりんelse問題(d...
#code{{
if (!a)
if (b)
b();
else // ← ぶら下がりのelse
a();
/* プログラム側ではこのように解釈されてしまう */
if (!a)
if (b)
b();
else
a();
}}
>ぶら下がりelseの問題は、フリーフォーマットを採用し、かつ...
オフサイドルールを採用して字下げのレベルに意味を持たせたP...
またブレースの記述を必須とするSwiftやGo, Rust等の言語も同...
Haskellの場合は、ifはelseを必須にすることによって、曖昧さ...
**4.3 ガード付きの等式 [#p1fc21d5]
>ガード付きの等式は、条件式と比べて、条件が多くなったとき...
たとえば、プレリュード関数 signumは以下のように定義すると...
-条件式
#code(haskell){{
signum :: Int -> Int
signum n = if n < 0 then -1 else
if n == 0 then 0 else 1
}}
-ガード付きの等式
#code(haskell){{
signum n | n < 0 = -1
| n == 0 = 0
| otherwise = 1
}}
p.41
**4.4 パターンマッチ [#i0e78eba]
>多くの関数は、パターンマッチを使うことで簡潔かつ直観的に...
パターンマッチによる関数定義では、パターンと呼ばれる式に...
もし最初のパターンに合致したら最初の結果、そうではなく二...
>たとえば、真理値の否定を返す否定演算子 notは、パターンマ...
#code(haskell){{
not :: Bool -> Bool
not False = True
not True = False
}}
***ワイルドカード [#wdd5ed7c]
>すべての値に合致するワイルドカード「_」
p.42
**4.4.2 リスト・パターン [#w114dc76]
***cons演算子 [#vdffda0f]
>これまでは Haskell のリストを分解不可能なデータとみなし...
実際には、リストは合成されたデータであり、空リスト []に対...
「:」は既存のリストの先頭に新しい要素を追加して新しいリス...
>たとえば、リスト[1,2,3]は以下のように分解できます。
[1,2,3]
1 : [2,3]
1 : (2 : [3])
1 : (2 : (3 : []))
>すなわち、[1,2,3]は 1 : (2 : (3 : []))の略記法にすぎませ...
リストを扱うときに括弧が増えないよう、cons 演算子は右結合...
たとえば、1 : 2 : 3 : []は 1 : (2 : (3 : []))という意味で...
p.43
>cons 演算子はリストの作成だけでなくパターンの作成にも利...
ページ名: