まだ基本問題なのにいやに疲れる。関数型言語というのは本質的に疲れる言語なのだろうか?
(以下は編集にて同日追加)
F#で前提とされていることが抜けているような気がして、「F# コアライブラリリファレンス」をぱらぱらと眺めていました。
Microsoft.FSharp.Core名前空間内の、Operatorモジュールがとても役に立ちました。以下は主にその内容に関するメモです。
List.map (fun x y -> x+y) lst
は
List.map (+) lst
と書けばよい。 * も同様
[3;5;7;9]は[3..2..9]と書ける。[4;3;2;1]は[4..-1..1]と書ける。
関数f, gについて、f(g(x))は(f>f)(x)とも書ける(関数の合成)。
List.map (fun x -> x.ToString()) lst は
List.map string lst と書ける。
List.fold (fun x y -> if x > y then x else y) lst は
List.fold max lst と書ける。minも同様。
System.Console.In.ReadLine() は
stdin.ReadLine() と書ける。stdout, stderrも同様。
using はC#とは違い、pythonのwithと同じような動きをする。つまり、
using (new System.IO.StreamReader(@"")) (fun x -> x.ReadToEnd())
と書くと、ストリームオブジェクトの寿命をすぐに終わらせられる。
List.zip [1;2;3] [4;5;6] |> List.map (fun x -> (fst x) + (snd x)) は
List.map2 (+) [1;2;3] [4;5;6] と書ける。map3同様。
以上です
F# AOJ ITP1_7
F# AOJ ITP1_7
- 添付ファイル
-
[拡張子 zip は無効化されているため、表示できません]
最後に編集したユーザー あんどーなつ on 2016年11月23日(水) 16:29 [ 編集 1 回目 ]
コメントはまだありません。