Haskell

九九の表

この間のRuby勉強会のお題をHaskellでやってみました。久しぶりにHaskell使いました。カンが鈍ってます。 module Main (main) where join :: [a] -> [[a]] -> [a] join sep = foldl1 (\ ss s -> ss ++ sep ++ s) kuku :: [[Int]] kuku = [map (n *) [1 .. 9]…

Gcodeへのコンパイルと(正格な)評価器

Compiling to Gcode - 趣味的にっきの続きです。 G-machine COSC406 Compiler Implementation Techniques p.18までソースからGcodeへのコンパイルと(正格な)評価器を実装してみました。

Haskell勉強会#8に参加しました

教訓。(特に初心者の方は)GHCは自分でコンパイルしようとするのは止めた方がよいです。例えそれがPortsであっても。はまりどころが多くて、それだけで始めよう!という気持ちが萎えてしまいがちです。 あ、あとhttp://cotocoto.jp/event/19053はちょっと無理…

Haskell勉強会#8に参加します

http://cotocoto.jp/event/18156 注目のid:snow-bellさんも参加されるようです。ギークなプログラマーが妻と上手に付き合いながら勉強する方法 - snow-bellの日記は僕もぜひ心に留めておきたいと思います。

Haskell Hackathon

Route 477(2008-01-21) うわー、関西会場があるんだったら参加したいです! 限られた時間でHaskellはとてもできないので、どの辺を作るか的をしぼった方がよさそうですね。例えば、型推論まわりとかLazyな評価器とか。。。 僕はLazyな評価器の辺が興味があり…

Compiling to Gcode

早速、G-machine COSC406 Compiler Implementation Techniques p.16-18のCompiling to GcodeをRubyで実装すると、こんな感じかな? def comp_sc(f, xs, e) # p [:comp_sc, f, xs, e] xs1 = xs.inject([{}, 0]) {|(h, i), x| h[x] = i; [h, i + 1] }.first co…

ハノイの塔

http://d.hatena.ne.jp/yone-chan/20071231 再帰の美しいアルゴリズムです。 Haskellに移植してみました。hanoi関数からIOを分離しています。 module Main (main) where hanoi :: a -> a -> a -> Int -> [(a, a)] hanoi _ _ _ 0 = [] hanoi a b c n = hanoi …

バースデーパラドックス

http://d.hatena.ne.jp/yone-chan/20080107#p1 バースデーパラドックスとは「23人集まれば50%の確率で同じ誕生日の人がいる」というものだそうです。 ホントかなぁと思って実際に計算してみました。Haskellは久し振りです。 module Main (main) where import…

SKIコンビネータでSKK = I

をやってみました。んー、あまりに素直に書け過ぎてつまんないなぁ。 module Main (main) where i x = x k x y = x s x y z = x z $ y z main = print $ s k k 100 == i 100 -- => True

複数の配列をひとつのループで処理したい - wata_d's diary

Haskellのリストの場合だったら、concat(またはconcatMapなど)するのが自然のように思います。遅延評価万歳です。 module Main (main) where main :: IO () main = do let a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] mapM_ print $ concat [a, b, c] Rubyの…

HaskellのDLLを作ってRubyから呼ぶ

18. Running GHC on Win32 systems — Glasgow Haskell Compiler 8.6.4 User's Guideを参考にやってみました。Haskellで書いたフィボナッチ関数をDLLにして、それをRubyのWin32APIを使って呼びます。Haskellのコードは必然的にIOになります。 ファイル名: fib…

無限オブ無限

無限オブ無限 - d.y.d. via 「無限オブ無限」をやってみた - sshi.Continual 僕もHaskellでやってみました。有限・無限のリストがまざっていても大丈夫なハズです。 module Main (main) where infListOfInfList :: [[String]] infListOfInfList = do c <- cy…

RubyからHaskellを呼び出すライブラリ

RubyからHaskellを呼び出すライブラリ、Rubiskellを作ってみた - Greenbear Diary yharaさん、GJです。 runghcはお手軽でよいのですが、Rubyの拡張ライブラリとしてHaskellを直接組込めないものでしょうか? この辺の技術を組み合わせればできそうな気がしま…

EmacsWiki: Flymake Haskell

おおー、いけがみさん、GJですー。その内試します。

GHC 6.8.1 リリース

だそうです。GHCi DebbugerとかHaskell Program Coverageとか開発環境が整備されています。素晴しい。こういうのはやっぱり標準にないと!! 参照: http://www.tom.sfc.keio.ac.jp/~sakai/w3ml/w3ml.cgi/haskell-jp-2/msg/138

IO モナドにハマってますヽ(  ̄д ̄;)ノ - 女子高生ぷろぐらまーなお☆のブログ

id:nobsunさんがとあるプログラム - HaHaHa!(old) - haskellで書いてくださっているので、僕が書くのはおせっかいな気がしますが、まぁ参考まで。んー、あんまりid:nobsunさんと変わらないかも(id:nobsunさんのは、setCurrentDirectoryが一箇所足りないよう…

Haskell勉強会#7が告知されています

10/13(土)は別の用事があって参加できません。残念です。ガラムのカレー食べたかったです(違)。 参照: http://cotocoto.jp/event/2222

Haskellのロゴ

Haskellのロゴでオリジナルのタンブラーを作ってみようかなと思って、Haskellのロゴを調べてみました。どうやらこの辺みたい。 Haskell logos - HaskellWiki Haskell Logo んー、いまひとつぴぴっとこないなぁ。 参照: スタバの「クリエイト・タンブラー」を…

言語開発合宿(二日目)

今日やったこと。 08:00 起床。雑魚寝でした。 09:30 朝食。コンビニでおにぎりとか。 12:00 Write Yourself a Scheme in 48 Hours: A Haskell Tutorialを9章までであきらめた。変数定義、関数定義ができるようになりました。 13:30 僕の最終発表。ゲームの…

言語開発合宿に参加しています

今日やったことを書いておきます。 11:30 大阪発。昼食は新幹線の中で「京のおばんざい弁当」。ヘルシーです。 14:45 中津川付近の会場に到着。少し迷いました。 15:00 付近。ネットワークに繋がらずご迷惑をおかけしました。 15:30 自己紹介。携帯向けBASIC…

複数引数の関数合成そのに

複数引数の関数合成 - 趣味的にっきをポイントフリーにしてみました。ぱっと見よくわからないのは相変わらずですが、何だこのきれいさは!! おどろきです。 module Main (main) where (<.>) :: (b -> c) -> (a -> b) -> a -> c (<.>) = (.) (<..>) :: (b -> c…

複数引数の関数合成

引数がふたつの場合、関数合成は(f .) . gになります。みっつの場合は、((f .) .) . gです。引数がひとつ増えるごとにかっこと.が増えていきます。Haskellの定石のひとつです。 んで、これって直感的に分かりにくいですよね。ということでオレオレ演算子を定…

http://cotocoto.jp/event/1720が今週末の土曜日に開催されます

残念ながら今回僕は参加できません。関数型言語に興味のある人はぜひせひ参加してみてください。きっと世界が広がります。

ArrowのKleisli

って何て読むんだろうと思って、ググってみました。「くらいすりー」ぽいです。やっぱりみんな読めないみたい。 参照: google:Kleisli 読み方

微分音律版フィボナッチミュージック

Beepを使って作りました。Windows限定。コマンドライン引数で音律(12音平均律だったら12)と、いくつの音を使うか(これで曲が決まります)を指定できます。 24音平均律の25がいい感じの曲になっています。 一応実行形式も用意しました。ダウンロードはこちらか…

Arrowを使ってwcコマンドを実装してみました

Arrowを写経 - 趣味的にっきでArrowの写経をしてみました。次は実際に簡単なプログラムで使ってみよう。ということで、wcコマンドを実装してみました(意図的に無理矢理使っているような気もします)。 入力の文字列を単語数、行数、バイト数の3つのパイプに分…

フィボナッチミュージックを実装しました

L'eclat des jours(2007-08-07)をHaskellで実装してみました。フィボナッチ数列を使って、音楽を奏でようという試みです。 フィボナッチ数列を求めるアルゴリズムは、Tea break: Haskellでフィボナッチ数列 - hayaのHaskell日記 - haskellのものを使わせてい…

フィボナッチミュージックを作りたい

んだけど、HaskellでMIDIを直接鳴らすにはどうしたらいいんでしょう(環境はwin32)。まだ詳しく調べてないけど、Haskoreでも無理そうだし(MIDI出力までみたい?)。Beepでやるか。TinyMMLみたいな感じで。 参照: http://www.haskell.org/haskore/ L'eclat des …

外部コマンドの実行結果を受け取るには

そういえばどうやるんだろうと思って、調べてみました。 サンプルプログラム。ls -aを実行して、その結果を加工して表示します。 module Main (main) where import System.IO (hGetContents) import System.Process (runInteractiveProcess, waitForProcess)…

Arrowを写経

新しい概念を覚えるには、とりあえず写経して使ってみよう。ということでやってみました。 大体何ができるのかわかったような気がしますが、これがピタっとハマる適用例って何でしょう? 便利で使えそうだとは、何となくもやもや思うのですが、どこで使うべ…