F#ではfold_left、fold_rightではなくList.fold、List.foldBack?

F#入門 fsharpintro.netのfoldの記事を見ると、Let.fold_leftとList.fold_rightになっていますが、マイクロソフトのAPIリファレンスを見るとList.foldとList.foldBackになっています。調べてみると機能は同じですが関数型言語によっていろいろ呼び方が違うようです。foldについては中身を実装していないので、もう一度ちゃんと勉強してみます。

手始めに、map関数などを書いてみる

OcamlとF#は、map関数などの実装方法がたくさんサンプルとしてあるので、何回も繰り返し書くことで学習できます。sum関数、map関数、reverse関数が簡単なのでまずはこれらから覚えるのがよさそうです。

https://en.wikibooks.org/wiki/F_Sharp_Programming/Lists

map関数

map関数は、List.mapがあっても気づいたときに何回も書いていたので、すぐ書けるようになりました。

リバース関数

 

fold関数、foldl

実装が難しそうと想像していたのですが、実際に書いて頭の中でステップ実行してみると全然難しくありませんでした。人が書いた記事を読むのでなく、自分で書いて、自分の頭の中でステップ実行するとよいようです。

ソースコードを書いて、上記のコメントのように書きながら1行ずつ脳内実行してみるとmap関数やreverse関数の知識で問題なく理解できます。

foldBack関数、foldr

https://en.wikibooks.org/wiki/F_Sharp_Programming/Lists を参考にして自分の分かりやすい変数名で書いてみて、コメントで書きながら脳内実行。

ひとまず、じぶんで実装して処理を追えるようになったのでいい感じです。次は使い分けを調べてみようと思います。

http://stackoverflow.com/questions/9055837/difference-between-fold-and-reduce

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA