Haskell

日本情報オリンピックの問題

id:kenkitiiさんがふつうの haskellプログラミング読了&はじめてのhaskell - Λάδι Βιώσαςで日本情報オリンピックの問題を解いていらっしゃいます。おっ、これはHaskellにぴったり。ということで僕も解いてみました。実際の問題はこちらです。 n 個の整数か…

eachで回してるときの次の要素がほしい

Route 477(2007-06-12) あー、これはよくありますねー。Haskellだとひとつずらしてzipっていうのが定石な気がします。一番最後の要素をどうするかっていうのは場合によりけりで悩ましいところですが。 main = print $ f [1, 2, 3, 4, 5] where f xs = zip xs…

順列の生成とList内包表記

この間のErlang勉強会で勉強した順列を生成する関数をいろいろと移植してみました。まず元のErlangの実装は以下。与えられたリストから要素を1つ取り出して、残りの要素から再帰的に順列を求めて、それらを結合するアルゴリズムです。ふむ、とてもシンプルで…

Rubyでリストモナドぽい何か

http://mono.kmc.gr.jp/~oxy/w/hiki.cgi?Non%20Determinismにあるリストモナドで非決定性計算をRubyでHaskellぽく解いてみようと思います。問題はこれです。元はSICPらしいです。 Baker, Cooper, Fletcher, MillerとSmithは五階建てアパートの異なる階に住ん…

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

http://cotocoto.jp/event/1571 初参加ですが、8割くらいは知った顔だったりします。以下メモです。 型宣言の読み方重要。 Int * Intがあふれないようにするのはプログラマの責任。IntとInteger。んー、型クラスの概念知らないと厳しいなぁ。 顔文字関数。 …

Fizz-Buzz問題

どうしてプログラマに・・・プログラムが書けないのか?の例題をHaskellでやってみました。すでに誰かやってる人いそうですが。んー、久しぶりにHaskell使ったら結構忘れてました。 main = mapM_ putStrLn $ map f [1 .. 100] where f i | (i `mod` 15) == 0 …

第9回 Haskellはなぜ遅いと思われているのか | 日経 xTECH(クロステック)

でてます。後で読みます。

darcs使ってみるか

Haskellでプログラムを書く身としては、やはり一度はdarcsを使ってみないといけないなーと思い、情報を収集してみました。ざっと読んだ感じでは、個人用にまったり使う分にはusableかな。Webサーバにレポジトリのファイル一式をごっそり置くだけで、レポジト…

第7回 入出力と遅延評価の間を取り持つIOモナド | 日経 xTECH(クロステック)

キタ。後で読みます。

テニスの勝負判定コード

キミのコードが汚い理由 - ITmedia エンタープライズ Javaのコードは修正後もちっとも美しさを感じなかったのでスルーしていたのですが、美しいコード? - sshi.ContinualのRubyのコードが美しく感じたので、僕もHaskellに移植してみました。Rubyのコードは…

九九を表示するプログラム

リスト内包表記を使って九九のリストを求めて、それを表示するようにしてみました。 module Main (main) where import Text.Printf (printf) kuku :: [(Int, Int, Int)] kuku = [(i, j, i * j) | i <- [1 .. 9], j <- [1 .. 9]] main :: IO () main = do hea…

cutコマンドもどき

を作ってみました。どーもcutコマンドはデフォルトの区切り文字とかオプションの指定方法が好きになれないので… module Main (main) where import Cinnamon (readFiles) import System (getArgs) import System.IO (stderr, hPutStrLn) main :: IO () main =…

HaskellでDynamic Programmingそのいち

http://nais.to/~yto/clog/2007-01-22-4.htmlを見ながら、Haskellでスコアテーブルを作成するところまで実装してみました。mkDPTableのcのあたりは定義そのままです。というかPerlのプログラムを読むよりも定義見て実装した方が楽だったんじゃ。それにしても…

なつめ‐Haskellによるかな漢字変換の実装

おーこんなところにもHaskellが。

草色阅读网 CaoSeW.Com-草色青青柳色黄,桃花历乱李花香!

残念ながら僕は参加できませんが、宣伝しておきます。関西地区でHaskellに興味のある方はぜひ。 【日時】 2007年1月28日(日) 13時30分〜17時 【場所】 豊中市立蛍池公民館 5F 第一講座室ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語…

Cinnamon-0.2リリース

しました。0.1との違いは以下の通りです。 Rubyの文字列処理関数を追加しました。 UCS4⇔UTF8変換の文字化けを修正しました。 関数xxxToUcs4、ucs4ToXxxをCinnamon.Ucsに移動しました。 参照: cinnamon プロジェクト日本語トップページ - OSDN

リストモナドの練習

揺動散逸日記 萌えるモナド講座その1を見ながら、「各桁の和の11倍と等しい三桁の整数」を実際に動かして求めてみました。answersでは、a、b、cの組合せの内から条件にマッチするもののみ返します。 module Main (main) where import Control.Monad (guard) …

CinnamonのCVSレポジトリの改行コード問題

今までCinnamonのCVSレポジトリにはCR+LFでファイルを登録していたのですが、これは相互運用性に問題があると連絡を受けました。どうやらCVSクライアントによっては、レポジトリには改行コードがLFで登録されているという前提で動くものがあるようです(例え…

草色阅读网 CaoSeW.Com-草色青青柳色黄,桃花历乱李花香!

1/28(日)かー。この日は、昼SONEで川瀬礼実子さん & 健さんのJazzライブを聞いて、その後ウクレレの集りの予定です。く〜、残念。参加したかったのに。無理そうデス。 参照: http://www7a.biglobe.ne.jp/~ken-remiko/ って明日NHK神戸でライブですか。仕事が…

Stateモナドの練習

与えた文字列を数字と解釈して、その和を状態として計算するプログラムを書いてみました。状態遷移がモナドで繋ってて、初期値を与えるとそれがフィックスする感じかな。 module Main (main) where import Control.Monad.State add :: String -> State Int S…

関数の引数の順番

Haskellで関数の引数の順番を考えるときには、一番変更するであろう引数を一番最後にするのがよいように思います(関数をカリー化して高階関数に渡す場合を考えると…)。 例えば、文字列を左詰めにして返す関数を考えてみます。ljustは文字列、幅の順番で、lju…

caseの途中にwhereが書ける

id:ha-tan:20070107:1168212959の続きのようなものですが、caseの途中にwhereが書けるのですね。これも知りませんでした。 module Main (main) where main :: IO () main = do case lookup 1 [(1, "aaa"), (2, "bbb")] of Just x -> func x -- => "aaa" wher…

第6回 局所的な「状態」を利用するためのStateモナド | 日経 xTECH(クロステック)

でてます。まだStateモナドって使ったことないので参考になりそうです。読まねば…

Cinnamon-0.2のリリーススケジュール

上記2点の変更を含めて、Cinnamon-0.2を今週末くらいにまとめたいなーと思っています。ucs4ToUtf8のバグはすでにCVSに登録済みですので、お急ぎの方はそちらを使ってください。

CinnamonにRubyの文字列操作関数を取り込みました

CinnamonにRubyの文字列操作関数を取り込みました。テストコードがあるので楽でした。 Cinnamon/RubyString.hs test/TestRubyString.hs 取り込む際に以下の点を変更しています。 インデント、変数の命名などは、元々のCinnamonプロジェクトのソースコードと…

Cinnamonのucs4ToUtf8にバグがありました

Cinnamonのucs4ToUtf8にバグがありました。ASCIIの範囲で文字化けします。もー、ショック死しそうorz 何でソコ、テストサボったのかと小一時間… Diff fo Cinnamon/Ucs.hs between version 1.4 and 1.5 参照: cinnamon プロジェクト日本語トップページ - OSDN

letでパターンマッチ

同じく。letでパターンマッチできたのですね。これも知りませんでしたorz module Main (main) where main :: IO () main = do let (x : xs) = func 10 print x -- => 1 print xs -- => [2,3,4,5,6,7,8,9,10] where func n = [1 .. n]

letで関数定義

letで関数定義できたのですね。知りませんでした。というか規格まともに読んでません… うーむ、読まねば。 module Main (main) where main :: IO () main = do let func :: Int -> Int -> Int -> Int func a b c = a + b + c print $ func 1 2 3 -- => 6

Rubyの文字列操作関数

最近id:desumasuさんがRubyの文字列操作関数をHaskellに移植してくれています。僕はRubyもHaskellも使うので、とても素晴しく思っています。これらの関数群をCinnamonにも取り込みたいなぁ。ソースコードのライセンスはどうなっているのでしょう? http://d.…

Cinnamon-0.1リリース

Cinnamon-0.1をリリースしました。ここからダウンロードしてください。 主な機能は以下の通りです。 NKFのHaskellバインディング。 UCS4⇔UTF8変換。 BASE64、CRC32、ROT13。 配列の二分探索。 その他ユーティリティ関数。 Cabal化していますので、おきまりの…