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