«前の日記(2011-07-31) 最新 次の日記(2011-08-02)» 編集

ɥozɐʞıɥ


2011-08-01 8月なう [長年日記]

_ [Web] ‪TOEIcojp さんのチャンネル‬‏ - YouTube

よんよんが仮面ライダー大好きなのです。これでレンタルを減らせるかも。

_ [F#] 練習問題

Rubyの聖地でHaskellを語るから練習問題が良問だったのでF#で書いてみました。

  • 入力として整数のリストあるいは配列 10, 20, 30, 40, 50 がある

  • 0 から数えて n 番目の要素には n を掛ける それらをすべて足し合わせる

  • つまり、以下のような計算をする

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#っぽいですね。

本日のツッコミ(全2件) [ツッコミを入れる]
_ いげ太 (2011-08-02 23:06)

> 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

_ ひかぞぉ (2011-08-02 23:14)

ご指摘有り難うございます。LispはListのTypoですね。失礼しました。コードのコピーでミスったかな。<br>Seq.zipって短い方に切り揃えてくれるのは知りませんでした。



2002|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|
«前の日記(2011-07-31) 最新 次の日記(2011-08-02)» 編集