2012年8月30日木曜日

Haskellで三項演算子のような物を定義する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

こう書きたい


if-then-elseはなんだか嫌だなぁと。でもガードじゃなくてワンライナーで書きたいなぁと。
出来るのかもしれないが、知らないので。教えて・・・。

>[x>5?1:2 | x <- [1..10]]
>[2,2,2,2,2,1,1,1,1,1]

無理だ


そもそも":"はリストを生成する為の演算子なので上のような書き方はシンタックスエラーで死ぬ。
"1:2"は"1:2:[]"と書け!と怒られる。
なので諦める。":"は諦める。

似非三項演算子


結果こうなった。
x ? (a, b) = if x then a else b
if-thenで返す値とelseで返す値をペアで取る事にした。
使う時はこう
>[(x>5)?(1,2) | x <- [1..10]]
>[2,2,2,2,2,1,1,1,1,1]

やったぜ!

2012年8月23日木曜日

[java] クイックソート 効率はよくない

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

クイックソート。

[Java] ヒープソート 遅い

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Javaでヒープソート。
もう見なくてもヒープソートも実装できる様になったわー。
この実装は再起を使っているので遅いらしい。
次はHaskellでやる。

2012年8月17日金曜日

[Haskell] FizzBuzzをやる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

メモ。すぐ忘れそうなので。
cycleが名前長いのが気に入らない。
take 100でリスト取り出してるだけなんで要件満たしてない気もする。
bとcが空かどうかを評価する部分が気に入らない
zip3使うのが何か負けた気がする
無限リスト楽しい。

take 100 [if b=="" && c=="" then show a else concat [b,c]|(a,b,c)<-(zip3 (cycle [1..]) (cycle["","","Fizz"]) (cycle ["","","","","Buzz"]))]