haskell

剰余をつかわない FizzBuzz

twitter で剰余演算をつかわずに FizzBuzz をどう実装するかというのを見かけて、それだったら…とつくってみたくなった。のでつくってみた。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if…

ファイルの違いを総当たりで確認

ファイルのリストが手元にあって、これらがぜんぶ同じことを確かめたい、ということがあって。いま。 リストの中の任意のふたつを取って組み合わせをつくるってことか。ううーん… foo f (x:xs) = map (f x) xs ++ foo f xs foo _ _ = [] main = do cs <- get…

不思議な計算ループ

あまりに駄文なので、もう、どうしよう。でも書いちゃったしなー。ということで。なにを計算するプログラムでしょう? というお題があって、そりゃあもう気になるじゃあないですか、あなた。 /* precondition: n >= 0 */ int mystery(int n, int *p) { int q…

6 / 2 (1 + 2)

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

数字を桁ごとに分解する方法

最近「すごいHaskell 楽しく学ぼう!」という本を買い、ちまちま読み進めているところ。第 6 章に「すみません。各桁の数の合計が 40 になる最初の自然数は何でしょうか?」というお題があって、これの解説中に map digitToInt . show という式があって、感…

foldr で dropWhile を再定義する

Haskell の Prelude に定義されている関数を、高階関数をつかって再定義してみようという「プログラミング Haskell」第 7 章の問題について。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; i…

続・クイックソート

そういえば、同じ値がたくさん入っている列をソートするときに、先日の partition をつかった実装だと、再帰呼び出しのなかで再度おなじ値の比較が走ることになって比較コストがばかにならないなあ… とおもった。 strcmp のように、一回の比較で同じか、小さ…

curry/uncurry 関数の使い方がわかった(かも?)

∧ を再定義する演習に取り組んでいるときに、検算を map で実行しようと考えた。 ∧ を and という名前の関数で定義したとして、これは二引数の(見かけをもったカリー化された、 Bool → Bool → Bool の型を持つ)関数になる。一方、ふたつの Bool 変数の全組…

クイックソート

「プログラミング Haskell」の第1章に、次の定義のクイックソートが出てくる。 qsort [] = [] qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a | a ← xs, a ≦ x] larger = [b | b ← xs, b > x]この章の例題を解いていて気が付い…

平衡三進数

まだまだ途中だけれど、とりあえず公開。 随時追記していきます。 ternary.lhs > bt x = tail.fromJust.find ((0==).head) $ iterate (\(x:ts) -> div (x + 1) 3 : mod (x + 1) 3 - 1 : ts) [x] 掛け算 0 を掛けると 0 になり、符号の異なる trit を掛け合わ…

10 進数を平衡三進数に変換する haskell ワンライナー: bt x = aux [] x where aux ts x = let (q, r, y, ts') = (div y 3, mod y 3, x + 1, r - 1 : ts) in if (0 == q) then ts' else aux ts' q

世の中に平衡三進数、あるいは対称三進数、英語で言えば balanced ternary というものがあると知ったのが昨日のこと。(「http://www.amazon.co.jp/gp/product/4622075482/ref=as_li_ss_tl?ie=UTF8&tag=ryohji-22&linkCode=as2&camp=247&creative=7399&creat…

「人材獲得作戦・4 試験問題ほか」を解こうとしている(帰ってきた・未完)

ちょっと間をあけてしまったけれど d:id:i_k_b:20100117:1263720610 の続き。 昨日の朝、電車の中でロジックを考えたコード: import Control.Monad import Data.List type Depth = Int type Cordinate = (Int, Int) type Position = (Depth, Cordinate) type…

「人材獲得作戦・4 試験問題ほか」を解こうとしている(再・未完)

いただいたアドバイス (id:rst76:20100115:1263567265) を拝読し、自前実装に取り込んでみた。 コードははしょるけれど、解を Maybe から List にして盤面探索すると以下のふたつしか見つからない: ************************** *S* *$$$$ * *$* *$ *$ ******…

「人材獲得作戦・4 試験問題ほか」を解こうとしている(続・未完)

昨日 (d:id:i_k_b:20100113:1263400645) の続き。 探索問題なんだ、ということで検索してかつて読んで感動したページ「Search using Haskell」を再発見。 これを参考に書き直したコードが以下: import Data.List import Monad main = do cs <- getContents l…

「人材獲得作戦・4 試験問題ほか」を解こうとしている(未完)

人材獲得作戦・4 試験問題ほか: 人生を書き換える者すらいた。 を読んで、こういう探索系の問題ってまともに解けた試しがないなあ、ということでチャレンジ中。どうせだったら不慣れな haskell の能力も磨こうとしたのが間違いか、停滞中。 うすらぼんやり…

MazesOfMonad

Twitter 経由で Haskell で実装されたローグライクゲーム MazesOfMonad があると知り、早速試してみた。まずコンパイルしないと話にならない。 cabal という haskell のビルドシステムを使っているので configure, build, install の 3 ステップが必要。しか…

uncurry?

uncurry なる関数が Excercise に出てて、コリャなんだ?と疑問符が頭の中を飛び交い中。とりあえず型を問い合わせてみた。ついでに uncurry があるなら curry もあるのか?って。あった。 Prelude> :t uncurry uncurry :: (a -> b -> c) -> (a, b) -> c Pre…

($) is apply

10 章の DETAILS に "The operator ($) is …. In other words it is the ``apply'' operator" という記述を発見。なんと! ($) は apply だったのかっ!Exercise 9.4 のことをおもいだし、うわ、こんな簡単な答えになるよってんで感動。 applyEach fs v = ma…

Exercise 9.9

fix 関数の型はどんなものかってのと、 fix を使って remainder を再帰でない形に書き直しなさいって問題。 fix と remainder の定義はそれぞれ以下のとおり: fix f = f (fix f) remainder :: Integer -> Integer -> Integer remainder a b = if a < b then …

Currying

9.1 Curring, More About Higher-Order Functions, "Haskell School of Expression" から引用。 This method of applying functions to one argument at a time, yielding intermediate functions along the way, is called currying, after the logician Ha…

foldl foldl が principal type を持てないわけ

foldl の型は: foldl :: (a -> b -> a) -> a -> [b] -> aこれの第一引数を foldl で束縛しようとすると何が起きるかを考えてみる。第一引数に束縛できるはずなので foldl を (a -> b -> a) にマッチさせなければならない。 foldl の型を三つの部分に分解する…

カリー化された高階関数の型

SOE の Exercise 5.2 は、部分適用済み高階関数の型を問う問題。 map map foldl foldl map foldl公式サイトの Errata に foldl foldl は principal type がなかったごめんという訂正があったので実質二問。いずれにせよ、さらっと流せない難しい問題と感じた…

School of Expression

The Haskell School of Expression (通称 SOE) という書籍を大購入して読み中。なかなか楽しい。http://www.haskell.org/soe/software1.htm にて SOEGraphics (旧称) モジュールの最新版が配布されている。インストラクションにしたがって 6.8.2 Haskell を…