Haskell
以前 配列を集合に見立ててべき集合を生成する(Haskell 版) - 似非プログラマの覚え書き で、リストを集合に見立ててべき集合の要素を列挙する関数を定義したが、Data.List を import して subsequences xs で良いことがわかった。鼻水噴いたわwww
Haskell で「これは入れとけ」的なパッケージがあったら教えてください。とりあえず今のところは yesod-platform yesod-bin lens kan-extensions operational linear (とそれらが依存するパッケージ)は入れた。2013/06/11 追記 : あと linear も入れました。…
結構大変なのでまとめておく。1. Haskell Platform をインストールする まずこれをしないと始まらない。 2. EclipseFP をインストールする。 これもまぁやらないと始まらない。 3. Helper Executable は Eclipse からインストールしないこと ! ここ重要。う…
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..] ] とか書…
以前 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 …
EclipseFP がいまいち子ちゃんなので、何かいいエディタはないものか、と物色していたらこんなのを見つけました。Leksah - Haskell IDE in HaskellHaskell で作られた、まさに Haskell による Haskell のための IDE が存在したのです。で、物は試しとさっそ…
EclipseFP が先日から不調である。本来ならソースコードが syntax highlighting されるはずなのに全くされない。プログラム自体はちゃんと動くのだが、何か気持ち悪い。誰か同じ現象の人いませんか ?
すごいHaskellたのしく学ぼう!作者: Miran Lipovača,田中英行,村主崇行出版社/メーカー: オーム社発売日: 2012/05/23メディア: 単行本(ソフトカバー)購入: 25人 クリック: 580回この商品を含むブログ (73件) を見るHaskell の入門書 3 冊目にしてようやく…
「ふつうの Haskell プログラミング」という本があるのだが、その本にある「標準入出力から読み込んだ文字列のバイト数を返すコマンド countbyte を作れ」という練習問題がいけてない。普通に考えれば main = do cs <- getContents print $ length cs で問題…
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] -> […
前に Python でカリー化の話をしましたが、実は Haskell だと話がもっと単純になります。 f :: a -> b -> c という関数を定義したとしましょう。このとき型 a の変数 x に対して f x :: b -> c になっています。これはまさにカリー化の構図そのものです。
「プログラミング Haskell」に subs という関数が書いてあった。 subs :: [a] -> [[a]] subs [] = [[]] subs (x : xs) = (subs xs) ++ map (x :) (subs xs) Haskell は神の言語か…? ちなみに一説によれば一行でも定義できるらしいのだが…。追記 : 可読性やメ…
Haskell には「as パターン」というものがあります。論より証拠で実例を見ていただきましょう。これは前に投稿した記事へのコメントから引用しています。 fib@(_ : tf) = 1 : 1 : zipWith (+) fib tf アットマークが as パターンです。この時 fib はどんなリ…
えー、ある方からコメントをいただきましたので、ここで釈明(?)しておきます。まぁ、プログラミングをかじったことのある人ならだれでも知ってるアルゴリズムを例に、Haskell で書き下したらどうなるかざっとご紹介したわけですが、私は「これが効率のいいア…
fibs :: [Integer] fibs = 0 : 1 : [x + y | (x, y) <- zip fibs (tail fibs)] Fibonacci 数列は急速に値が大きくなるので Int より精度の高い Integer 型を使ってます。もうあまりの嬉しさに泣きたくなってきた。
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 関数の最初の宣言は順序クラスに…
primes :: [Int] primes = sieve [2..] sieve :: [Int] -> [Int] sieve (p : xs) = p : sieve [x | x <- xs, x `mod` p /= 0] 目から鱗でござった。