|
ToDo:
|
よんよんが仮面ライダー大好きなのです。これでレンタルを減らせるかも。
Rubyの聖地でHaskellを語るから練習問題が良問だったのでF#で書いてみました。
10 * 0 + 20 * 1 + 30 * 2 + 40 * 3 + 50 *4 = 400
ちょっとだけ苦労しました。List.zipがあるってことを知らなかったヲレです。(ご指摘いただき修正)
let ret = List.zip([10..10..50]) [0..4] |> List.map (fun (x:int, y:int) -> x * y) |> List.reduce(fun x y -> x + y)
printfn "Ans=%A" ret
いげ太さんに教わりました。mapiってのを知らなかったヲレです。
[10..10..50] |> Seq.mapi ( * ) |> Seq.sum
これはF#っぽいですね。
> Lisp.zip<br>り、Lisp(^^;<br><br>ネタ元の Haskell コードをマネるなら、Seq.zip を使うのがよさげかと。List.zip の場合、束ねるリストの長さが違う場合に例外になりますが、Seq.zip の場合は短い方に切り揃えてくれます。<br><br>Seq.zip (Seq.initInfinite id) [10..10..50]<br>|> Seq.map (fun (x,y) -> x*y)<br>|> Seq.fold (+) 0<br><br>で、より F# らしく書くと、こんな感じですかね。<br><br>[10..10..50] |> Seq.mapi ( * ) |> Seq.sum
ご指摘有り難うございます。LispはListのTypoですね。失礼しました。コードのコピーでミスったかな。<br>Seq.zipって短い方に切り揃えてくれるのは知りませんでした。