argius note

プログラミング関連

Haskell

IOをつなげる練習

あたりまえですが、思ったとおりの結果が出力されます。 main = p 2 `and_then` p 3 >> twice (p 6) p :: (Show a) => a -> IO () p n = print n and_then :: IO () -> IO () -> IO () and_then a b = a >> b twice :: IO () -> IO () twice a = a >> a

ポーカーの役判定 (改良版)

1/17に作ったものを元に、単純で明解にしつつ、かつ、よりHaskellっぽく(なってるかな?)させてみました。 あと、個人的なこだわりで、バックスラッシュと"$"を排除しています。そのためにわざわざ内包表記にしていると見受けられる部分もありますが、その…

ghciでenumFrom

注意:真似しないでください。 Enumというクラスがあって、enumFromというメソッドがあります。これをghciでこんなふうに評価してみた。 Prelude> enumFrom 1これって即ち、 main = print [1..] とほとんど同じなので........あああああ、どうやって止めるの…

ポーカーの役判定

最近ちょっとHaskellやる気が出てきたので、昨日の(どう書く?orgの)Ruby版をベースにHaskellで書いてみました。ふつけるの第8章までに登場するもの以外は、たぶんほとんど使っていません。 自分のHaskell力では、今のところこれが精一杯かな。なので、あ…

フィボナッチ数列

これももう、やりつくされているであろう例題。数式に近い形で関数定義ができました。 fibonacci 1 = 1 fibonacci 2 = 1 fibonacci n = fibonacci (n - 1) + fibonacci (n - 2) main = print $ map fibonacci [1..30]確かにこれでも計算はできますが、30だと…

指定した文字数で改行

テキスト*1P.191の問題。頑張ってはみたものの、型の問題ではまって断念。解答例を参考に、「もし自力で解けていたら」のコード。"splitLine"はほぼそのまま。 splitLine n line = case splitAt n line of (s, "") -> [s] (s, ss) -> s : splitLine n ss spl…

整数に変換して階乗

今度は実行時引数が2桁以上でも実行できるように、文字列を整数に変換する関数を定義しました。 階乗の関数は、パターンマッチでなくガードでやっています。 import System import Char atoi :: [Char] -> Int atoi [c] = digitToInt c atoi (c:cs) = atoi […

リストプロセッサ

今日はリストです。Haskellのリストは単方向リンクリスト(の一種?)なので、Lispのリストみたいに使えば良さそう。というわけで、Lispもどきをしゃべらせます。 car (x:xs) = x cdr (x:xs) = xs main = do print $ car "abcde" print $ cdr "abcde" print $ c…

階乗の模範解答などなど

(趣味的にっき 経由) はい、私の例はまさに「低い」方の例でした。1行で書くのはトリッキーすぎるので、視覚的にも階乗と理解しやすい2行の例をまず覚えておきたいと思います。 これで今日は、パターンマッチングというものを覚えました。ちょっと進歩です。…

GHCインストール+環境設定

まずhttp://www.haskell.org/ghc/からインストーラバイナリをダウンロード。ディレクトリは、/opt/ghc6.6/に。エディタは、Meadowにhaskell-modeを入れて書き書き。実行はCygwin上で。 最初は、階乗をやってみた。 -- test.hs すごくぎこちない import Syste…

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

来年を待たずに、Haskell開始です。カテゴリがまた無駄に増えました。 ちょうど良い具合に本屋に平積みされていたので、購入。サイズが小さめ(A5判)なので、電車で立っていても何とか読めます。指攣りますが。ほかにも色々と親切設計で、初心者がつまづきそ…