Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

haskellに関するsiroccoのブックマーク (535)

  • HaskellのIntegerをC++で使う - iorate's blog

    C++の標準には多倍長整数ライブラリがありません。これは大変なことだと思います。 まあBoost.Multiprecision来るじゃないというのはさておき、 標準の多倍長整数がないなら他言語の標準から持ってくればいいということで、HaskellのIntegerをラップしてC++の多倍長整数クラスにしてみました。 まずIntegerを扱う関数をFFIでエクスポートします。Integerを引数・戻り値にする関数はエクスポートできないので、代わりにStablePtr Integerを使います。これはIntegerオブジェクトを指すポインタで、GCに回収・再配置されない保証があります。CやC++からはただのvoid *に見えます。 とりあえずfromIntegral、(*)、showをエクスポートしました(今回は乗法と出力がしたいので)。StablePtr IntegerとCStringの解放関

    HaskellのIntegerをC++で使う - iorate's blog
    sirocco
    sirocco 2012/10/20
    "StablePtr Integerを使います。これはIntegerオブジェクトを指すポインタで、GCに回収・再配置されない保証があります。"
  • vector-algorithms

  • Data.List

    sirocco
    sirocco 2012/10/04
    リストは遅いというけれど色んなツールが既に出来ていて便利。VectorのsortBYとか誰か作っていそうだけど。
  • Warning on specialisations when compiling Haskell Code with ghc

    sirocco
    sirocco 2012/09/20
    GHCに -O2 オプションをつけるとSpecConstr Function `$j_s3KZ{v} [lid]'・・・とメッセージが出るが気にしなくて良いらしい。Main.hs の先頭に{-# OPTIONS_GHC -fspec-constr-count=16 -O2 #-} を入れると出なくなった。Don Stewart カコイイ!
  • Haskellの配列でクイックソート - あどけない話

    Haskell の クイックソート としては、以下のようなコードがよく例に出てきます。 quickSortList :: [a] -> [a] quickSortList [] = [] quickSortList (x:xs) = quickSortList lt ++ [x] ++ quickSortList gt where lt = filter (<x) xs gt = filter (>=x) xs これは、小さなリストを何度も連結するので、効率が悪そうです。 そこで、一旦配列に直し、固定領域を使ってソートして、またリストに戻す方がいいのではないかと思い、実装して速度を比べてみました。配列を使うクイックソートのコードは、「珠玉のプログラミング」から拝借しました。ベンチマークも含むコードは、gist に上げています。 結果はこんな感じ(単位はms): 入力のサイズ 10^4 10

    Haskellの配列でクイックソート - あどけない話
    sirocco
    sirocco 2012/09/20
    リストは便利だけど、リストより速いコンテナを探している・・・Vector がいいのか?
  • Haskellコードの高速化

    Haskellで速いコードを書くためのヒントを無秩序に集積したもの。環境としてはGHCを想定する。私は高速化について詳しい訳ではないが、思い付いたことはなんでもかんでも書くように心がけたので、運が良ければ何か役に立つ情報があるかもしれない。 並列処理のパフォーマンスについてはこの文章では触れない。まったく経験がないので。同じ理由で、浮動小数点数を多用した数値計算コードの効率化と、書き換え規則を多用する高水準の最適化も扱わない。 お願い: 文中に間違いや分かりにくい部分があれば指摘いただけると有難いです。また、他に載せた方が良さそうな最適化テクニックや、その他の改善提案があれば教えてください。掲示板またはメールまたはTwitter(@mkotha)までお願いします。 目次 基的なこと 遅延評価の計算量見積もりの方法と、GHCの内部に依存しないテクニック集。入門書を読んだけれども、Haske

  • Performance - HaskellWiki

    Haskell Performance Resource Constructs: Data Types - Functions Overloading - FFI - Arrays Strings - Integers - I/O Floating point - Concurrency Modules - Monads Techniques: Strictness - Laziness Avoiding space leaks Accumulating parameter Implementation-Specific: GHC - nhc98 - Hugs Yhc - JHC Welcome to the Haskell Performance Resource, the collected wisdom on how to make your Haskell programs go

    sirocco
    sirocco 2012/09/19
    こんなに差が出ない・・・。
  • Numeric Haskell: A Vector Tutorial - HaskellWiki

    Vector is a Haskell library for working with arrays. It has an emphasis on very high performance through loop fusion, whilst retaining a rich interface. The main data types are boxed and unboxed arrays, and arrays may be immutable (pure), or mutable. Arrays may hold Storable elements, suitable for passing to and from C, and you can convert between the array types. Arrays are indexed by non-negativ

    sirocco
    sirocco 2012/09/17
    スピードアップのため、Vectorに挑戦中。
  • Haskell Platform 2012.2.0.0を入れたよ! - shokosブログ

    6月3日、わたしの誕生日かつ結婚式の翌日にHaskell Platform 2012.2.0.0がリリースされたようです!! Download Haskell Haskellからの結婚祝い&誕生日祝いだと思えるくらい、うれしい機能追加が。 @shelarcy さんがGoogleGroupのHaskell-jpにまとめてくれているのですがGoogle Groupsわたしからもいくつかご紹介 まずalexが3系になったおかげで、日語の扱いが素晴らしく楽になりました。 main = writeFile "ほげ.txt" "ああああ" 今までSystem.IO.UTF8等をimportしなければならなかったのが、標準ライブラリで日語が扱えるように。 あと、ghciでdata宣言もできるようになりました。 Prelude> :{ Prelude| data Hoge = Foo | Piyo P

    Haskell Platform 2012.2.0.0を入れたよ! - shokosブログ
    sirocco
    sirocco 2012/09/13
    ghci での data 宣言、日本語の扱いが楽になったそうな。wxHaskell はコンパイルするだけでいいかな・・・あとはCinnamonとか、やっぱ面倒・・・Orz
  • はてなブログ | 無料ブログを作成しよう

    進捗管理が趣味の楽しみ方の景色を変えた 進捗管理の仕事をやらされていた。嫌だったというか、つどつど起きるトラブルがしんどくて最初はかなりストレスだった。なので、進んでやりたいことだと思わなかった。それに、かなり抽象的な技術で、に書かれている通りのフレームを当て込んでも、その通りにはなら…

    はてなブログ | 無料ブログを作成しよう
  • http://tanakh.jp/pub/fp-tudoi-2012/tudoi.html

    sirocco
    sirocco 2012/09/07
    「すごいHaskellたのしく学ぼう!」("Learn You a Haskell for Great Good!") の紹介。超特急のモナド紹介でもあるけれど本を読んで理解してからでないとたぶん意味不明。
  • Text.Printf

    sirocco
    sirocco 2012/08/29
    Haskell は堅いイメージの言語ですが、 printf もあって柔軟に文字列を作ることができます。(引数が可変なのでコンパイルは通っても、実行時にエラーになる可能性があります)
  • Windows 環境の Haskell に iconv パッケージをインストール - なんとなくな Developer のメモ

    以下の環境の Haskell に文字コード変換のための iconv パッケージをインストールする手順を書いておきます。 HaskellPlatform 2010.2.0.0 (GHC 6.10.4) 今回、FFI(外部関数インターフェース)を使っているパッケージのインストールが初めてで勝手が分からず苦労しましたが、以下のサイトが非常に参考になりました。 Haskellでiconv - 椿の日記 なお、iconv.h ファイル等を用意して cabal コマンドでインストールしてみると、インストールは一応完了しますが、実行時にエラーが出るようなのでご注意ください。(手動でインストールするしかないみたいです) 事前準備 まず、以下のサイトから iconv-0.4.0.2.tar.gz をダウンロードして適当なディレクトリに解凍しておきます。 iconv パッケージ 次に、iconv.dll 等を

    Windows 環境の Haskell に iconv パッケージをインストール - なんとなくな Developer のメモ
  • 多相関数のprintfデバッグをGHCiで - www.kotha.netの裏

    Haskellでのデバッグといえばprintfデバッグなのではないかと思う。printfデバッグは大抵の場合うまくいくが、多相的な関数を書いているときは不便なことがある。表示したい値を文字列にする手段がない場合だ。 import Debug.Trace import Data.List mysort :: (Ord a) => [a] -> [a] mysort [] = [] mysort (x:xs) = trace ("inserting " ++ show x) $ -- エラー! xはshowできない insert x $ mysort xs main = print $ mysort [1,3,2,0] -- デバッグ用入力 実際のデバッグ入力であるIntegerはshowできるのだが、mysortの型からはそれが演繹できないのでshowを呼ぶことができない。ここでxを表示する

    多相関数のprintfデバッグをGHCiで - www.kotha.netの裏
    sirocco
    sirocco 2012/08/26
    多相関数は引数にとる値の型が確定していない。この例で言うとOrd型のインスタンスなら良い。Showインスタンスの制約を付加すればprintfデバッグが出来るのだが、変更が多量にわたるとき変更しないでデバッグする方法。
  • Beautiful Error Handling

    Beautiful Error Handling 田中英行 <tanakh@preferred.jp> 2012年夏のプログラミング・シンポジウム 自己紹介 田中英行 (@tanakh , http://tanakh.jp ) (株)Preferred Infrastructure勤務のプログラマ Haskell 愛好家 BASIC(20年), C++(15年), Haskell(10年) 「すごいHaskellたのしく学ぼう!」 (Learn You a Haskell for Great Good! の和訳) 好評発売中!! 概要 エラー処理に美しさを! エラー処理の抽象化 Haskellでのアプローチ エラー処理に美しさを! 背景 エラー処理は醜くなりがち なんで汚くなるのか? これまで適切な抽象化が行われて来なかったから なぜそういう状況になっているのか? 大きな原因の一つはプログ

    sirocco
    sirocco 2012/08/25
    2012年夏のプログラミング・シンポジウム、田中さんの発表資料「Beautiful Error Handling」。
  • HackageDB: introduction

    About HackageDB HackageDB is a collection of released Haskell packages. Each package is in the Cabal format, a standard way of packaging Haskell source code that makes it easy to build and install. (HackageDB and Cabal are components of a broader Haskell infrastructure effort called Hackage.) These pages are a basic web interface to the Hackage package database. This isn't the official HackageDB.

    sirocco
    sirocco 2012/08/25
    速い! 快適desu
  • [Haskell] putStr is not evaluated in the correct order

    sirocco
    sirocco 2012/08/22
    バッファの文字列を強制的に表示させる。(hFlush stdout または hSetBuffering stdout NoBuffering)
  • 絵で見るモナド · eed3si9n

    2012-08-21 John Wiegley さんの “Monads in Pictures” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2012年8月20日 John Wiegley 著 2012年8月21日 e.e d3si9n 訳 これはモナドのチュートリアルではないし、ここには数学用語も出てこない。稿は、既にモナドを一応使えるぐらいには習った人を対象とする。視覚化することで、何のために何をやっているかが明らかになるはずだ。 関数 モナドに対する直感を得る一つの方法として関数からモナドへの抽象化をたどるというものがある。関数が何をやっているのかを簡単な絵で表してみよう。Haskell の関数の呼び出しの構文を上に、同じ演算を視覚化したものを下に置いた: 関数はある値 a を投射 (map) して別の値 b を得る。中で何が起

    sirocco
    sirocco 2012/08/22
    Arrow が分からないので理解したい。
  • Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません

    モナドのすべての継続モナドのところが簡潔で、概念とかもあまり明示的に説明してなくて理解に苦労したので、ポイントをメモ。誤りなど、乞うご指摘。 newtype Cont r a = Cont { runCont :: ((a -> r) -> r) } instance Monad (Cont r) where return a = Cont $ \k -> k a (Cont c) >>= f = Cont $ \k -> c (\a -> runCont (f a) k) 概要的なこと 継続といいつつ、Contが表すのは継続というより、CPSな関数。*1 CPSな関数は、引数に関数をとり、自分の仕事の最後でその関数(継続)を呼ぶ。 CPSな関数に、継続として別のCPSな関数を渡す、その別のCPSな関数に継続としてさらに別のCPSな関数を渡す、…の連鎖(CPSな関数のネスト)が、全体として

    Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません
  • はてなブログ | 無料ブログを作成しよう

    ぬかいわし、タレカツ、鶏の半身揚げ、そして笹団子。新潟を平らげる2泊3日 今回の旅の目的地は新潟。新潟には申し訳ないのだが、自発的に決めた目的地ではない。JR東日の「どこかにビューーン!」という行き先ガチャサービスにより決定されたのだ。新潟といえば酒どころ米どころ。ちょうど新米の季節だ。どんとこい。古町エリアに宿を取っ…

    はてなブログ | 無料ブログを作成しよう
    sirocco
    sirocco 2012/07/20
    GeneralizedNewtypeDeriving を使うと Monad, Functorまでが自動で導出される。スゲー。