F# AOJ ITP1_7

あんどーなつ
記事: 171
登録日時: 8年前
連絡を取る:

F# AOJ ITP1_7

投稿記事 by あんどーなつ » 8年前

まだ基本問題なのにいやに疲れる。関数型言語というのは本質的に疲れる言語なのだろうか?

(以下は編集にて同日追加)

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同様。

以上です
添付ファイル

[拡張子 zip は無効化されているため、表示できません]

最後に編集したユーザー あんどーなつ on 2016年11月23日(水) 16:29 [ 編集 1 回目 ]

コメントはまだありません。