Haskell > 本 > 入門Haskellプログラミング > LESSON 4
#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="
" 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>
}}
レッスン4で学ぶ内容
関数を他の関数への引数や他の関数からの戻り値として使用することができます。
#code(haskell){{
then myFunction x else x
inc n = n + 1
double n = n * 2
square n = n ^ 2
ifEvenInc n = ifEven inc n
ifEvenDouble n = ifEven double n
ifEvenSquare n = ifEven square n
}}
*Main> ifEvenInc 4 5
*Main> ifEvenDouble 10 20
*Main> ifEvenSquare 20 400
動作OK
*Main> inc 2 * 3 9
inc 2 が先に計算されて3になる。
3 * 3 = 9になる。
2 * 3が先に計算されて、inc 6 = 7、とはならないことに注意!
関数を他の関数に渡す用途の1つはソートです。
#code(haskell){{
import Data.List
names = [
("Ian", "Curtis"), ("Bernard", "Sumer"), ("Peter", "Hook"), ("Stephen", "Morris") ]
compareLastNames name1 name2 = if lastName1 > lastName2
then GT else if lastName1 < lastName2 then LT else EQ where lastName1 = snd name1 lastName2 = snd name2
*Main> names [("Ian","Curtis"),("Bernard","Sumer"),("Peter","Hook"),("Stephen","Morris")]
*Main> sort names [("Bernard","Sumer"),("Ian","Curtis"),("Peter","Hook"),("Stephen","Morris")]
*Main> sortBy compareLastNames names [("Ian","Curtis"),("Peter","Hook"),("Stephen","Morris"),("Bernard","Sumer")]
並び替えOKでした。