F#でARC#001_B

というわけで解いてみました.とりあえず F# で.Scala で書いても Ruby とほとんど同じになりそう(ひどい).

どうでもいいけど,いつも通り SyntaxHighlighter でハイライトしようとしたら案の定 F# が対応してませんでした.ということで苦肉の策で gist.ちゃんと埋め込み用の js 用意されてたよ.神か.

1 行目.いきなり標準入力で躓く.標準出力は printfn があるけど標準入力は F# のライブラリには無い? 調査不足ではありますが.まあでも副作用(最近覚えた)だししかたないね.ということで .NET です.

2 行目.タプルを使った束縛は Ruby の多重代入に似てる.めちゃ便利.F# で型キャストはどうやるのかな,と思って調べてみたら,変換したい変数に変換先の方の修飾子をつけるだけでいいっぽい.これは int.Parse より楽.あと地味にインデックスの指定でつまづきました.括弧の前にドットが要るのはどうなんだろう.外せなかったんだろうか.fsi にダメ出しされまくりました.

3 行目.ごく普通の条件分岐です.これぐらいの短さだったら三項演算子使いたいんだけど実装されてないっぽい.ここは C# に軍配.

5-10 行目.関数型っぽく再帰を使って書いてみました.ちなみにここはコンパイラの警告で網羅されてないパターンに (1, 5) が挙げられてたんだけど,5 で割った剰余って 0-4 しかないからありえないよね,と思うんですがどうなんだろう.僕の気付いてない落とし穴があるんだろうか.

12 行目.F# の出力はどうも整形形式しかないっぽい.print x とかやりたいよなあ.まあ引数に直接関数の返り値を渡せるのは便利かな(関数型はみんなそうだが)(ていうかオブジェクト指向もだけど)(もしかしたら C でも出来る?)(コンパイル型もちゃんと勉強しましょう).

一番の大きな壁は入出力だけど,これ 1 回の実行で多ケース実行されるパターンの問題だったらどうするんだろう? いちおう立場上はマルチパラダイムだから再代入可能な変数を使えばいいんだろうけど,何か負けた気がする.Scala なら var を使えばいいけど Haskell とかだとどうするんだろう.

まとめ:全体的に勉強不足でした.

コメント

このブログの人気の投稿

慶大プレ小論文

改名

org-refresh-category-properties: Invalid function: org-with が出たら