Swiftにおける関数型のエッセンスを学ぶために「関数プログラミング実践入門」を読み始めた

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20150805-182005.jpg

Swiftの関数型言語的な特徴についての話を各所で見るようになりましたが、自分は関数型言語の経験があまりありません。

「一度関数型言語について学んでおいたほうが良いのでは?」と思い、「関数プログラミング実践入門」という本を読み始めました。

    

スポンサード リンク

Haskellには「2引数関数」というべきものがない

まだ途中までしか読んでいないのですが、いまのところ一番衝撃を受けたのは、「Haskellには厳密には2引数関数というべきものがない」という点です。

例えば、Haskellには論理積を求めるための関数「&&」があります。この関数を普通に使うと、

Prelude> (&&) True True   -- TrueとTrueを渡す
True                      -- 結果はTrue
Prelude> (&&) True False  -- TrueとFalseを渡す
False                     -- 結果はFalse
Prelude> (&&) False True  -- FalseとTrueを渡す
False                     -- 結果はFalse
Prelude> (&&) False False -- FalseとFalseを渡す
False                     -- 結果はFalse

となりますが、これは実際には、まず1つ目の引数を渡して1引数の関数を作り、その関数に2つ目の引数を渡しています。

Prelude> let andT = (&&) True -- 1つだけ真偽値を与えて、andTという関数を作る
Prelude> :t andT              -- andTの型を調べる
andT :: Bool -> Bool          -- andTは、Boolを1つ受け取り、Boolを1つ返す関数
Prelude> andT True            -- andTにTrueを1つ渡す
True                          -- 結果はTrue(TrueとTrueの論理積)
Prelude> andT False           -- andTにFalseを1つ渡す
False                         -- 結果はFalse(TrueとFalseの論理積)

これと同じことをSwiftで書いてみると、以下のようになるのかなと思います。

// Boolを1つ受け取り、「Boolを1つ受け取って、Boolを1つ返す関数」を返す関数
func and(a:Bool) -> Bool -> Bool {
    return {b in a && b} // 「Boolを1つ受け取って、Boolを1つ返す関数」を返す
}

let f1 = and(true)  // trueを渡し、関数を作る
f1(true)            // 関数にtrueを渡す(結果はtrue)
f1(false)           // 関数にfalseを渡す(結果はfalse)

let f2 = and(false) // falseを渡し、関数を作る
f2(true)            // 関数にtrueを渡す(結果はfalse)
f2(false)           // 関数にfalseを渡す(結果はfalse)

    

@akio0911はこう思った。

手続き型言語ばかり触ってきたので、次々と出てくる概念が目新しくてとても面白いです。

この本を1冊読み終わった時点で、Swiftがどのような言語として見えるようになるのかがとても楽しみです。

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

20150104-120413.jpg

【おすすめ本】Swiftではじめる iPhoneアプリ開発の教科書【iOS 8&Xcode 6対応】

     入門者にオススメな、Swift&Xcode 6の入門書「Swiftではじめる

記事を読む

20150410-122409.jpg

複数バージョンのXcodeを共存してMacにインストールする方法

いよいよXcode 6.3が正式にリリースされましたね。 今回は複数バージョンのXco

記事を読む

20141119-114354.jpg

【iOSアプリ開発】隙間時間で読んで学ぶのにオススメな入門本「はじめてのSwiftプログラミング」

「はじめてのSwiftプログラミング」という入門書が手頃なサイズで、持ち歩いてスキマ時間で読んで

記事を読む

20140818-141439.jpg

iPhoneアプリを作りたい開発初心者にまずはやってみて欲しい3つのこと

今日は、これからiPhoneアプリを作りたい開発初心者の方にやってもらいたいことを書いてみた

記事を読む

I20160209-123839.jpg

【Swift】プロパティのsetとgetには異なるアクセス修飾子を指定できる

Swiftでは、プロパティのセッタ(set節)とゲッタ(get節)に異なるアクセス修飾子

記事を読む

I20160125-104438.jpg

iPhoneアプリの開発に必要なものをまとめてみた

僕はアプリ開発講座を開催していますが、その関係もあって「iPhoneアプリを開発するには、ど

記事を読む

I20151201-120520.jpg

【Swift 2】switch内にてguardでbreakする

Swift 2のguard内ではreturnしないと文法エラーとなりますが、実はswitch

記事を読む

I20160409-211651.jpg

Xcode 7.3の新機能についてまとめてみた

2016年3月22日にXcode 7.3がリリースされましたが、自分が知らない機能があるかもしれ

記事を読む

I20150907-185322.jpg

uGUIの使い方が分かる本「uGUIではじめるUnity UIデザインの教科書」

株式会社マイナビ様より献本御礼。 本書は、公式のUIフレームワーク「Unity UI(uGUI

記事を読む

I20151122-213340.jpg

【入門本】詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift 2 + Xcode 7対応

ソーテック社より「詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift

記事を読む

I20170521-225453.jpg
東京駅八重洲口の「羊肉酒場 悟大」で網焼きジンギスカンを頂きました!

ゆうせいさんと株式会社 大庄さんからご招待頂き、悟大withサッポ

I20170514-165235.jpg
iPhoneと連携できる体重体組成計「Withings Body Cardio」を使ってます

ジムに通い始めて体脂肪率が落ち始めたのをキッカケに、iPhoneと

I20170507-155440.jpg
【派手髪】ハーレイクイン風の髪色に染めてもらいました

2016年10月20日、ハーレイクイン風の髪色に染めてもらいました

I20170504-173110.jpg
【メンズネイル】東京・新宿のネイルサロンでターコイズのホログラムネイルしてもらった

ネイルネタが1年分くらい溜まっているので、ちょっとずつ書いていこう

I20170502-010117.jpg
SNUGGのライトニングケーブルが耐久性高し。8ヶ月使ってますが断線の気配なし!

iPhoneの充電&転送ケーブルであるLightningケーブルっ

→もっと見る

PAGE TOP ↑