Haskell

配列を集合に見立ててべき集合を生成する(Haskell 版・真打登場)

以前 配列を集合に見立ててべき集合を生成する(Haskell 版) - 似非プログラマの覚え書き で、リストを集合に見立ててべき集合の要素を列挙する関数を定義したが、Data.List を import して subsequences xs で良いことがわかった。鼻水噴いたわwww

おまいらのオススメパッケージ教えろください

Haskell で「これは入れとけ」的なパッケージがあったら教えてください。とりあえず今のところは yesod-platform yesod-bin lens kan-extensions operational linear (とそれらが依存するパッケージ)は入れた。2013/06/11 追記 : あと linear も入れました。…

EclipseFP を使えるようにするまで

結構大変なのでまとめておく。1. Haskell Platform をインストールする まずこれをしないと始まらない。 2. EclipseFP をインストールする。 これもまぁやらないと始まらない。 3. Helper Executable は Eclipse からインストールしないこと ! ここ重要。う…

EclipseFP で自作パッケージを認識させる方法

EclipseFP を入れて my-module ってプロジェクトを作って自作のモジュールを入れたんだけど、これを他のプロジェクトでも使えるようにするにはどうすればいいんだ ? cabal.exe: At least the following dependencies are missing: my-module -anyってメッセ…

文字列のリストの各要素を一行ごとに改行させて表示する

移動しました → 文字列のリストの各要素を一行ごとに改行させて表示する - 似非プログラマのうんちく

複数のパッケージに共通する関数を切り出すには ?

Haskell で複数のパッケージで同じ関数を使っているとき、パッケージごとに同じ関数定義を書くのが面倒なので一つにまとめたいんだけどどうすればいいんだろう ?2013/01/23 追記 : 解決。

三角数のリスト

正の整数 n と (n - 1) 番目の三角数の tuple の無限リスト [(1,0),(2,1),(3,3),(4,6),...] を生成する関数をなるべく短く書きたいんだけどどうしたものか。 [ (n, sum [0..(n - 1)]) | n <- [1..] ] とか [ (n, n * (n - 1) `div` 2) | n <- [1..] ] とか書…

関数 curry

以前 Haskell におけるカリー化の話をしたが、実際に f :: (a,b) -> c という 2 変数(というか変数の組)を取る関数に対して curry :: ((a,b) -> c) -> (a -> b -> c) という関数があって、定義では curry f = \x y -> f (x,y) となっている。

階乗

Haskell の参考書とかを見ていると階乗を再帰関数の練習として載せているものが多いが、ぶっちゃけて fact :: Int -> Int fact n = product [1..n] で良かったりする。で、これだと n が 0 のとき困るんじゃないの、って思った人もいると思うんだけど、GHCi …

Leksah を使ってみる

EclipseFP がいまいち子ちゃんなので、何かいいエディタはないものか、と物色していたらこんなのを見つけました。Leksah - Haskell IDE in HaskellHaskell で作られた、まさに Haskell による Haskell のための IDE が存在したのです。で、物は試しとさっそ…

EclipseFP 不調

EclipseFP が先日から不調である。本来ならソースコードが syntax highlighting されるはずなのに全くされない。プログラム自体はちゃんと動くのだが、何か気持ち悪い。誰か同じ現象の人いませんか ?

すごい Haskell たのしく学ぼう !

すごいHaskellたのしく学ぼう!作者: Miran Lipovača,田中英行,村主崇行出版社/メーカー: オーム社発売日: 2012/05/23メディア: 単行本(ソフトカバー)購入: 25人 クリック: 580回この商品を含むブログ (73件) を見るHaskell の入門書 3 冊目にしてようやく…

「ふつうの Haskell プログラミング」がいけてない

「ふつうの Haskell プログラミング」という本があるのだが、その本にある「標準入出力から読み込んだ文字列のバイト数を返すコマンド countbyte を作れ」という練習問題がいけてない。普通に考えれば main = do cs <- getContents print $ length cs で問題…

EclipseFP で外部パッケージを import する方法

Juno たんに EclipseFP をインストールして Haskell Executable もインストールして、C:\Program Files\Haskell 以下に諸々のパッケージが展開されてて utf8-string も入ってたからこれで日本語も行けるぜヤッター ! と思ったら import System.IO.UTF8 って…

関数を引数にとって関数を返す関数

「C 言語がポインタで躓くなら、関数型言語の躓きは『関数を引数にとって関数を返す関数』ではないか」と Twitter でつぶやいていた人がいたのでふと考えてみたのですが map :: (a -> b) -> [a] -> [b] なので f :: a -> b が与えられると map f :: [a] -> […

Haskell におけるカリー化

前に Python でカリー化の話をしましたが、実は Haskell だと話がもっと単純になります。 f :: a -> b -> c という関数を定義したとしましょう。このとき型 a の変数 x に対して f x :: b -> c になっています。これはまさにカリー化の構図そのものです。

配列を集合に見立ててべき集合を生成する(Haskell 版)

「プログラミング Haskell」に subs という関数が書いてあった。 subs :: [a] -> [[a]] subs [] = [[]] subs (x : xs) = (subs xs) ++ map (x :) (subs xs) Haskell は神の言語か…? ちなみに一説によれば一行でも定義できるらしいのだが…。追記 : 可読性やメ…

as パターン

Haskell には「as パターン」というものがあります。論より証拠で実例を見ていただきましょう。これは前に投稿した記事へのコメントから引用しています。 fib@(_ : tf) = 1 : 1 : zipWith (+) fib tf アットマークが as パターンです。この時 fib はどんなリ…

言い訳がましいようですが

えー、ある方からコメントをいただきましたので、ここで釈明(?)しておきます。まぁ、プログラミングをかじったことのある人ならだれでも知ってるアルゴリズムを例に、Haskell で書き下したらどうなるかざっとご紹介したわけですが、私は「これが効率のいいア…

Fibonacci 数列は 2 行 !

fibs :: [Integer] fibs = 0 : 1 : [x + y | (x, y) <- zip fibs (tail fibs)] Fibonacci 数列は急速に値が大きくなるので Int より精度の高い Integer 型を使ってます。もうあまりの嬉しさに泣きたくなってきた。

クイックソートも 6 行で

qsort :: Ord a => [a] -> [a] qsort [] = [] qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a | a <- xs, a <= x] larger = [a | a <- xs, a > x] マジ Haskell 凄いんですけど。ちなみに qsort 関数の最初の宣言は順序クラスに…

エラトステネスの篩がたったの 4 行 !

primes :: [Int] primes = sieve [2..] sieve :: [Int] -> [Int] sieve (p : xs) = p : sieve [x | x <- xs, x `mod` p /= 0] 目から鱗でござった。