Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

最大値を求める

Swiftは、命令型プログラミングと関数型プログラミングをサポートしているマルチパラダイムプログラミング言語です。

そこで、「最大値を求める」という関数を通して、命令型プログラミングと関数型プログラミングのアプローチの違いを紹介いたします。

命令型プログラミングと関数型プログラミングの違い

関数型プログラミングの基礎 JavaScriptを使って学ぶ (amazon)」から

  • 土台となっている数学モデルが異なる
    • 命令型プログラミング = チューリング・マシン
    • 関数型プログラミング = ラムダ計算
  • それぞれにおける計算の意味が異なる
    • 命令型プログラミング = 命令(状態の変更)を実行すること
    • 関数型プログラミング = 関数を呼び出して値を得ること

命令型プログラミングによる最大値の導出

最大値を格納する変数を用意し、forループ文で各要素を比較していく。

imprerative_maximum.swift
func maximum<T>(_ arr: [T]) -> T where T: Comparable {
    guard arr.isEmpty == false else { fatalError() }
    var maximum = arr[0]
    for i in arr {
        maximum = maximum > i ? maximum : i
    }
    return maximum;
}

関数型プログラミングによる最大値の導出

最大値を返すmax関数を再帰で呼び出していく。

functional_maximum.swift
func maximum<T>(_ arr: [T]) -> T where T: Comparable {
    switch arr.count {
    case 0:
        fatalError()
    case 1:
        return arr[0]
    default: 
        return max(arr[0], maximum(Array(arr.dropFirst())))
    }
}

参考書籍

関数型プログラミングの基礎 JavaScriptを使って学ぶ Amazon

すごいHaskellたのしく学ぼう! Amazon

関連Qiita

命令型プログラミングと関数型プログラミングによる単方向リスト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?