宣言的とは目的のみの記述

がprivateな場所で書いていた文章を読んで理解が進んだ

publicになってた
例えば、 map()
map()
とは「要素の集まりと関数を引数にとって、要素の全てに関数を渡す」という機能を提供する関数
Haskellでmapを再定義するなら以下のようになる
hsmap' :: (a -> b) -> [a] -> [b]
map' f = foldr ((:) . f) []
foldr
という手段を用いている
tsならreduceを使って同様に定義できる
以下のようにも書ける
hsmap' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' f (x:xs) = f x : map' f xs
「パターンマッチ」と「再帰」という手段を用いている
いずれも、
map()
よりも抽象度の高い手段を用いている
map()
の定義内は上述の目的達成のためのコードしかない!
「関数型プログラミングは宣言的」とよく言われるのは、上記のように
データ構造とか、データのフローさえも関数として提供することで、
primitiveに、抽象度ごとに、段階を踏んで、 手段
と 目的
を組み合わせて、
プログラミングをしているからか、というのがわかってきた

そう考えれば、「この関数の責務は何なのか?」というのを明確に理解して関数を作らないと、宣言的を提供する関数を作れない?
Haskellが素晴らしいのは、そのコミュニティ内で良質な論文があがっていることからもわかる