2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最大値を求める

Last updated at Posted at 2018-03-23

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

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?