Haskell > 本 > 入門Haskellプログラミング > LESSON 3

入門Haskellプログラミング

#html{{

table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798158666/vertex9-22/" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51o1oUqjsvL._SL160_.jpg" border="0"></a></td>

td> </td>

td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798158666/vertex9-22/" target="_blank">入門Haskellプログラミング</a><br>Will Kurt<br>翔泳社<br>2019-07-31<br>¥ 4,104</td></tr></table>
}}

LESSON 3

3.1 ラムダ関数

書式

\x -> x

本書、p.26の図3-1には間違いがある。
「関数の引数(複数の場合もある)」から伸びている線は、右側のxに向かっているが、正しくは左側のxに向かっていなければならない。

ラムダ関数の書き方の例

Prelude> (\x -> x * 2) 4
8

型を確認してみます。

Prelude> :t (\x -> x)
(\x -> x) :: p -> p
Prelude> :t (\x -> x * 2)
(\x -> x * 2) :: Num a => a -> a

3.2 where句

(参考)

補助関数とは、関数定義の内部でのみ使用する部分的な関数のことです。
補助関数を作成することで、複雑で分かりにくいプログラムの構造を簡潔にして可読性を向上することができます。
また、処理毎に分割することはプログラムを再利用しやすく、保守性のあるものにします。
なお、補助関数を内包する親となる関数は「最上位関数」と呼ばれます。
Haskellにおける補助関数の定義方法は「let」と「where」の2通りありますが、whereを使うほうが一般的といえます。
どちらを使用しても問題ありませんが、混在していると可読性が悪くなるため、統一して利用することが推奨されています。

3.3 let式

(p.29)

Haskellには、where句の代わりに使用できるlet式と呼ばれるものがあります。

where句とlet式の違いは?

素朴な疑問です。

基本
let 変数/関数 in 式という書式で、ローカルな変数や関数を定義できる。
letは式なので結果を返す。

whereとの違い
whereと似ているが以下の点が異なる。

  • どこでも書ける。
  • whereではガードをまたぐことが出来るが、letで定義したものはinの中でしか参照できない。

好みの問題もあるが、基本的にはwhereを使って、必要な場合はletを使うのが良さそう。

「ガード」による違いがあるみたいですね。
基本はwhereを使っておくことにしておきたいと思います。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS