Haskell

Santa Claus problem

{-# LANGUAGE TypeOperators #-} import Data.List import Data.Pseudo (Pseudo, (:->),randomDelayList,merger,probe,embedPseudo) data Colleague = Elf Int | Reindeer Int deriving (Eq,Show) elf :: Int -> [Colleague] -> [Colleague] elf n (x:xs) = …

Arrowのインスタンス

関数の型構成子とKleisliトリプル以外にArrowのインスタンスで一般的なものって?

命令語訳抜きで関数型語を教えられるか

和訳抜きで英語は教えられるかを読んでふと思った。

双方向畳み込み

双方向の畳み込みというのを考えてみた. a ┏━━┓ a' ┏━━┓ ┏━━┓ a'' → ┃ ┃ → ┃ ┃ → … → ┃ ┃ → ← ┃ ┃ ← ┃ ┃ ← … ← ┃ ┃ ← c''┗━━┛ c' ┗━━┛ ┗━━┛ cコードは fold :: ((a,c) -> b -> (a,c)) -> (a,c) -> [b] -> (a,c) fold f (a,c) (x:xs) = (a'',c'') where (a''…

2010

http://parametron.blogspot.com/2010/01/2010.html リスト内包表記の練習みたいなコード module Main where import Data.Char import Data.Function import Data.List import System.Environment data Term = Val Char | App Char Term Term ops4 :: [Char]…

ソート

inspired by http://d.hatena.ne.jp/yamamucho/20100110/1263082701 import Data.List --挿入ソート ins :: Ord a => [a] -> [a] ins = foldl f [] where f s x = case span (x>) s of (t,u) -> t++x:u --選択ソート sel :: Ord a => [a] -> [a] sel = rever…

蓄積しつつ,畳み込む.

foldL :: (a -> b -> c -> c) -> c -> (a -> b -> a) -> a -> [b] -> c foldL f c g a (x:xs) = f a x (foldList f c g (g a x) xs) foldL _ c _ _ _ = c 先日のtakeWhileAcc は foldL のインスタンス. takeWhileAcc :: (a -> b -> Bool) -> (a -> b -> a) …

takeWhileAcc

リストの要素を先頭から見て,特定の条件を満すあいだだけ,要素をとりだしたいとき,takeWhileを使う.条件をすこし一般化して,先頭からの畳み込み値にも依存するようにしたいことが結構あるような気がする.というわけで、takeWhileAccを定義してみた. t…

副作用(side-effect)をめぐって

Haskellプログラミングを始めようとしているプログラマに「Haskellには副作用があるのか」という質問をされると,「ある」と答えるHaskellerと「ない」と答えるHaskellerがいるらしい(私は「ない」と答える派).これでは,「いったいどっちが本当?」とい…

HIMA3 開催のご案内

第3回 HIMA(Haskell Internet Meeting Anytime)を12月13日(日) 19:00〜22:00 に開催いたします.HIMAはHaskellプログラミングに興味をもつ人が,とりとめなく,おしゃべりをするという会です.一応のお題はありますが,Haskellの知識経験の有無深浅にかかわ…

const をめぐるあれこれ

Prelude には,const :: a -> b -> a という関数が定義されています.a -> b -> a という型は a -> (b -> a) のことなので,この関数を引数に適用すると,b -> a という型の関数になります.できあがった関数はどのような値 v :: b に適用しても,この関数を…

Haskellで「ものまねどり Mocking Bird」

自己言及がはいるとHaskellでは型付けができないので,無理かなとおもったら,unsafeCoerceという邪悪なものを使う方法があるそうです.これで,いろいろ遊べそう. module Birds where import Control.Applicative import Unsafe.Coerce -- Haskellで定義済…

アナグラム

Haskellらしさってなんだろうということを考えつつ,[id:yard:20091104]にある課題を解くプログラムを考える過程を記録してみた.整理していないのでとりとめがないです. 単語辞書から相互にアナグラムになっている単語を集める. アナグラムとは,(意味の…

ちょっとしたプログラミング

[id:yarb:20091109]にちょっとしたお題があったので,頭のなかを晒してみよう. 2乗した結果に1から9までの数字が1度ずつ現れる整数をすべて挙げよ まぁ素朴に1から100,000までの数字をチェックしよう. sortを使うからData.ListをインポートすればOKかな. …

Programming in Haskell

こちらの翻訳本もいよいよでますね.プログラミングHaskell作者: Graham Hutton,山本和彦出版社/メーカー: オーム社発売日: 2009/11/11メディア: 単行本(ソフトカバー)購入: 14人 クリック: 503回この商品を含むブログ (115件) を見る

とりあえず,チュートリアル. % cabal install happs-tutorialとりあえずローカルで見ることできるようにする. % cd ~/work % tar xvf ~/.cabal/packages/hakcage.haskell.org/happs-tutorial/0.9.0/happs-tutorial-0.9.0.tar.gz % cd happs-tutorial-0.9.…

できてきた

すこし薄くなったかな. Real World Haskell―実戦で学ぶ関数型言語プログラミング作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア出版社/メーカー: オライリージャパン発売日: 2009/10/26メディア: 大型…

O'Reilly Japan - Real World Haskell

第一報です :) 楽しんでいただければ幸いです。(10/17 追記) アマゾンにも出たようです。 Real World Haskell―実戦で学ぶ関数型言語プログラミング作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア出版社…

大文字・小文字の反転(その2)

[id:mzp:20090804#maybe]Maybeで繋げるなら,こんな感じかな. import Control.Monad import Data.Char import Data.Maybe affect :: (MonadPlus m, Eq a) => (a -> a) -> a -> m a f `affect` x = if fx == x then mzero else return fx where fx = f x inv…

大文字・小文字の反転(その1)

[id:mzp:20090804#invert]変換関数を直接作るなら,こんな感じかな. import Control.Arrow lowers = ['a'..'z'] uppers = ['A'..'Z'] exFun :: Eq a => (a,b) -> (a -> b) -> a -> b exFun (x,y) f x' = if x == x' then y else f x' invertChar :: Char ->…

Haskellに副作用はないのか?

Haskellには副作用はないのか?議論に微かな違和感があるような気がしたのですが,それが何にたいする違和感かよくわかりませんでした.件の記事を読みかえして,また違和感を感じたので,すこし考えてみることにします. 「副作用」って何のことを言ってい…

クレジットカード番号の Check Digit

クレジットカード番号の最後の桁はチェック用の桁です.チェックは,クレジット番号を一桁おきに倍にして(10以上の場合は9を引いて)足し合せそれが10で割り切れるかどうかを知らべるものです.ただし,最後のチェック用の桁を倍にすることがないように,番…

Real World Haskell 読書会

内容 O'Reilly刊の Real World Haskellを読む 日時 2009年04月18日(土)13:00 〜 18:00 場所 株式会社タイムインターメディア 2F会議室 参加登録 資料準備,会場のキャパの都合などがあるので'''必ず'''参加登録をお願いします. 備考 今後1回/月のペース…

JUS勉強会「Haskellによる関数プログラミング」資料

先週3/20に行われました勉強会に祝日にもかかわらず参加いただきましてありがとうございます. 当日の資料はhttp://hop.timedia.co.jp/downloads/jus200903にて公開しております. また,当日,説明できなかった部分などの解説はすこし整理してから公開しま…

SD 記事のエラッタ

Software Design 4月号「—Haskellで学ぶ— 関数プログラミングことはじめ」の記事に関して校正で見おとした誤りなどの修正を以下のURLで公開しています.http://hop.timedia.co.jp/show/article/SD200904また,感想など聞かせていただけると大変嬉しいです.

Software Design 4月号

id:software_design「—Haskellで学ぶ— 関数プログラミングことはじめ」にて記事を書きました.読んでいただけると嬉しいです.

"Real World Haskell" Jolt賞受賞

http://www.realworldhaskell.org/blog/2009/03/12/we-won-a-jolt-award/Congratulations!読書会を4月より開始予定.Real World Haskell作者: Bryan O'Sullivan,John Goerzen,Don Stewart出版社/メーカー: Oreilly & Associates Inc発売日: 2008/12/05メディ…

2 進表現

これは,は,,,で構成できる.ということは,はとで構成できる.つまり, となるような演算子を定義できる.そうするとは,の 2 進表現を逆順にならべたものと, を対応させて構成できる.このときはで構成できる.これをHaskellのコードにすると以下のよ…

タプリング

ととからがもとまるわけである.がわかるので項の値の限界の設定も可能である.しかし,とを独立に計算するのは樹状再帰になって効率が悪い.そこで,Fibonacci数列では定石のタプリングを考える. とする.,はが求まれば求まるわけである.さて, [tex:\be…

問題 2:Fibonacci列偶数値項の和

Fibonacci数列の項はそれに先立つ2つの項を足すことで生成する.1,2 から始めて最初の 10 項は 1,2,3,5,8,13,21,34,55,89,... である.4,000,000を超えない偶数の値をもつ項の和を求めよ. HaskellだとエレガントにFibonacci数列が定義できてしまう.