タグ

Haskellに関するyukimori_726のブックマーク (17)

  • Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ

    CodeforcesやProject Eulerの問題には、無限リストをうまく使うと綺麗に解くことができる問題がたくさんあります。 数列の性質から探索範囲の上界を決めて解を探索することが多いのですが、きちんとした根拠を持って上界を決めることができることは少なく、余裕を持って十分に広い範囲で計算して解を求める解法がよく取られます。 Haskellの特徴である遅延評価とその洗練された糖衣構文を用いると、無限リストを簡単に扱うことができます。 上界を適当に定める解法よりも、より宣言的で美しく、時に効率的なコードで同じ解を得ることができます。 しかし、無限リストをきちんと、それも無限個の無限リストをきちんと扱うとなると、意外と苦労します。 この記事では、無限個の無限リストをソートされた形で結合する方法について説明します。 一般的な無限リストではなく、条件はかなり絞っていてます (そうでないと原理的

    Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ
  • hmatrixの使い方とニューラルネットワークの実装例 - Qiita

    hmatrixはBLAS/LAPACKをベースにしたHaskellで行列を扱うライブラリです 調べるとlinearという線形代数のためのライブラリがありますが依存関係を見ているとlinearはlinearはOpenGL等のグラフィックの処理に使われることが多く数値計算にはhmatrixが使われているみたいです。 http://packdeps.haskellers.com/reverse/linear http://packdeps.haskellers.com/reverse/hmatrix ベクトルと行列 hmatrixでのベクトルと行列の作り方と簡単な使い方を紹介します。 ghciでNumeric.LinearAlgebraをimportした前提で書いていきます。

    hmatrixの使い方とニューラルネットワークの実装例 - Qiita
  • 48時間でSchemeを書こう - Wikibooks

    Web上にあるほとんどのHaskellチュートリアルは言語についてのマニュアルのような教え方をしようとしているようです。それらには言語の文法、概念が少し載っていて、読者に対話環境でいくつかの簡単な関数を作るように指示します。よく機能する有用なプログラムの書き方は大抵最後にまわされるか、そもそも省かれていたりします。 このチュートリアルは違う方針を取ります。コマンドライン引数解析から始めて、完全に機能するR5RS Schemeのかなり大きなサブセットの実装まで進みます。道すがら、Haskellの持つI/O、mutable state、dynamic typing、エラー処理、そして構文解析機能を学びます。このチュートリアルを終える頃には、あなたはHaskellとScheme両方がかなり良くわかるようになっているはずです。 このチュートリアルの対象読者は主に以下の2種類です。 LispかSch

  • すごいHaskellたのしく学ぼう! | オーム社 eBook Store

    丁寧な解説とポップな例題で物のHaskellプログラミングを習得できる入門書。 原書の“Learn You a Haskell for Great Good!”は、型、遅延評価、モナドといった難しい概念にも自然に慣れていけるよう工夫された構成、他の言語経験者への配慮に加え、原著者による楽しいイラストによって、もっとも分かりやすいHaskellとして、高く評価されています。

    すごいHaskellたのしく学ぼう! | オーム社 eBook Store
  • Write You a Haskell ( Stephen Diehl )

    Building a modern functional compiler from first principles. Stephen Diehl In 2014 I wrote a short tutorial about building a small imperative language in Haskell that compiled into LLVM. I was extremely happy with the effect the tutorial seemed to have, and the warm response I got from so many people was very encouraging. I've done a great bit of thinking about what the most impactful topic I coul

    Write You a Haskell ( Stephen Diehl )
  • モナドって結局何なのよ? — join to Monad v0.1.3 documentation

    モナドって結局何なのよ?¶ Haskell を勉強しようとすると必ず「モナド」ってのが出てきます。困ったものです。数学とか圏論とか関係があるらしくって、何が書いてあるんだか分からなくって嫌になってしまいます。でもね、Haskell って凄いらしいじゃないですか、格好良いらしいじゃないですか。ここはちょっとがんばって色々考えてみましょう。 そもそも Haskell って何なのよ?¶ 何なんでしょうね、Haskell って。コンピュータ言語らしいんです、あ、それは分かってると。良く挙げられる性質は次な感じ?: 関数型言語 強い型付け 遅延評価 参照透過 ここでちょっと型に関して見てみましょう。試しに Haskell の実装の 1 つである Hugs で 1 について考えてみます。Hugs では :type や :info というコマンドで hugs に型の情報などを質問することができます。例え

  • System F をHaskellとPythonで実装した - -

    無事夏休みに突入して時間ができたので再びTaPLを読み始めました.半年触っていなくても進行,保存の証明が書けるあたり,春の自分はずいぶんしっかりと勉強していたようです.春は22章の型再構築まで読んでいたので,ひとまず23章のSystem Fから読んでサクッと実装しました.Pythonが書きたかったので,パーサーだけHaskellで書いてそれ以外をPythonで書くというよく分からない構成で実装していますが,いろいろと学びがあったのでそれを記していきます. System Fとは 変数,抽象,適用からなる単純型付きラムダ計算に型抽象と型適用を加えて拡張した計算体型のことを指します.パラメータ化した型による計算ができることから多相ラムダ計算とも呼ばれます.この体型のみでは基型が存在せず型の具体化が十分にできないので,Bool型の構文を追加してそれらしい操作ができるようにしています.単純型付きラ

  • 最近読んだ論文 - xuwei-k's blog

    以下のtweetしたように、最近それなりに、(主にHaskell関連の)論文読んでるのだけれど 最近、論文読むの楽しいと思うことがそれなりにあるけど、いや楽しいとかじゃなく無意識に時間があればずっと論文読み続けてるのが当たり前の状態にならないとだめだ。って自身に言い聞かせようとし出すような変な意識の高まり方してる 2015-07-18 02:30:31 via Twitter Web Client 一回読んだだけではすべてを理解できるわけでもないし、「うまく日語に要約して紹介」ですら結構頑張らないとできる気がしないけど、それなりに読んでるのを、とりあえず一覧でまとめておこうと思った次第。 昔は論文なんて全然読む習慣なかったし、読もうとしても(英語力と前提知識の問題で)全然読めなかったけど、少しでも読めるようになってくると楽しいですね。 あと「読んだ」というのは、 最初に読んだのは結構昔だ

    最近読んだ論文 - xuwei-k's blog
  • Stackを使って楽しくHaskellスクリプティング - Qiita

    今までいまいちモチベが上がらなかったHaskellでスクリプトを書くというのが、急に現実的になってしまったので、紹介します。 Haskellでスクリプティングする上での問題点 Haskellはもともと簡単なテキスト処理を書きやすいプログラミング言語ではあるのですが、標準で提供されているライブラリはあまり多くないので、必要に応じてコミュニティーパッケージを導入しなければその力を存分に発揮することができません。 通常のパッケージなら、cabalに依存関係を書けばパッケージマネージャで自動的に(コケることもありますが、理想的には)管理できるのですが、シェルスクリプトやPerl、あるいは最近ならPythonでやるような、コードを直接インタプリタで実行するような形のコードでは、そのような依存関係を自動で解決することは難しく、その上、仮にやろうとしたところで、いつまでもその依存パッケージが新しいコンパ

    Stackを使って楽しくHaskellスクリプティング - Qiita
  • 実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!? - プログラムモグモグ

    この記事では, Haskellに用いられる「遅延評価」の仕組みを, 図に描いて説明します. 更に, 遅延評価版のフィボナッチ数の無限列を, JavaScriptで実装します. 遅延評価とはどのように動くのか, 考えて行きましょう. HaskellのコードとJavaScriptのコードの比較 Haskellでの x = y y = 10 と, JavaScriptの var x = y; var y = 10; というコードを考えてください. Haskellのコードは, これだけでは何も起こりません. print xとすると, x = y = 10 となって 10 が表示されます. 一方, JavaScriptのコードは var x = y; を評価した瞬間, 「ReferenceError: y is not defined」というエラーが出ます. 更に, main = let x = 1

    実装して理解する遅延評価の仕組み 〜 thunkを絵に描いて理解しよう・JavaScriptでHaskellを実装!? - プログラムモグモグ
  • パターンマッチの構文, Enumerable#lazy - Journal InTime(2012-03-09)

    _ パターンマッチの構文 pattern-matchというライブラリで赤黒木を実装してみてパターンマッチの便利さを改めて実感したが、やはり言語レベルのサポートがあった方がよいと感じたので構文を考えてみた。 既存の構文の互換性は維持する。 新しい予約語を追加しない。 という方針を立てて考えると、case式を拡張するのがよさそうだ。 Haskellのcase式を参考にしてみよう。Haskellでは赤黒木のbalanceを以下のように書くことができる。 balance :: RB a -> a -> RB a -> RB a balance left key right = case (left, key, right) of ((T R a x b), y, (T R c z d)) -> T R (T B a x b) y (T B c z d) ((T R (T R a x b) y c)

  • 第33回 木構造のSeq型を効率よく操作する

    前回,Seq型の要素はviewl関数またはviewr関数を使って参照することを説明しました。viewlやviewrを利用すると,リストに対して用意されている様々な関数と同様の機能を持つ関数をSeq型に対して定義できます。 しかし,viewlやviewrを使って実装した関数は,Seqを左端または右端から順に処理するため,処理に線形時間がかかってしまいます。これでは,Seq型がFingerTreeという木によって実装されている利点を生せません。今回は,Data.Sequenceモジュールが提供するいくつかの関数を取り上げ,それらがいかに効率的な処理を行っているかを説明します。 Seq型にランダム・アクセスする関数 前回紹介したviewlやviewrは,Seq型の要素に逐次的にアクセスします。これとは別に,Seq型がFingerTreeという木によって実装されていることを生かし,Seqの特定の個

    第33回 木構造のSeq型を効率よく操作する
  • Parsec, 高速なコンビネータパーサ

    文書は次に掲げる URL で示される文書の部分的な邦訳です。 http://www.cs.uu.nl/people/daan/download/parsec/parsec.html Parsec, 高速なコンビネータパーサ Daan Leijen University of Utrecht Dept. of Computer Science PO.Box 80.089, 3508 TB Utrecht The Netherlands daan@cs.uu.nl, http://www.cs.uu.nl/~daan Parsec, 高速なコンビネータパーサ Daan Leijen University of Utrecht Dept. of Computer Science PO.Box 80.089, 3508 TB Utrecht The Netherlands daan@

  • 本物のプログラマはHaskellを使う:ITpro

    筆者 shelarcy Haskellは,関数型プログラミングというジャンルに属する言語です。Haskellや関数型プログラミングを題材に物事を見ていくことで,今まで思いもよらなかったような未知の世界を知ることができるでしょう。 プログラミング言語を学ぶという行為には, 言語の基的な文法や考え方を理解する 言語の文化圏で広く使われている考え方に親しんでその言語らしい書き方を習得する 単に言語を使ってできること以上の知恵を学ぶ の3段階があります。この連載では,三つ目の段階を目標に,Haskellプログラミングの世界を一つひとつ丁寧に紹介していきます。 更新は毎月第1水曜日(1月のみ第2水曜日)

    本物のプログラマはHaskellを使う:ITpro
  • 遅延評価とIO - あどけない話

    僕は今、プログラマーとしての幸福感に満たされている。遅延評価を習得できたと思えるからだ。 遅延評価 なぜ関数プログラミングは重要かには、遅延評価の利点を以下のように説明している。 停止条件はループの体とは切離すことができ、強力なモジュール化が可能となる。 例として載っている「ニュートン-ラプソン法による平方根」は、若干難しいので、簡単な別例を示そう。Haskell には、第一引数の数だけ、第二引数を繰り返す関数 replicate がある。 > replicate 3 'a' → "aaa" これを普通に実装するとこうなる。 replicate 0 c = [] replicate n c = c : replicate (n-1) c Haskell 以外で実装する場合、きっとループを使うだろう。ただ、ここでは再帰かループかは問題ではない。 問題は、「結果を作る仕事」と「終了条件を判断

    遅延評価とIO - あどけない話
  • プログラム・プロムナード

    会誌「情報処理」連載の「プログラム・プロムナード」(2002年4月〜2005年3月掲載)と「Haskellプログラミング」(2005年4月〜2006年3月掲載)はどなたでもご覧になれます。ファイルはすべてPDF形式です。 「Haskellプログラミング」に掲載されたプログラムは http://www.sampou.org/haskell/ipsj/ から取ることができます.

  • Prolog を Haskell で書く。 - 言語ゲーム

    Prolog インタプリタを Haskell で書きました。しばらく書いただけで満足してしまっていたのですが、このまま人知れず消えて行くのも寂しいので勉強した事を書きます。まず、参考にしたソースは前回書いた hugs98/demos/prolog/ です。このソース。大変短くて良いのですが、素人目には簡潔すぎて難しいのと、書かれたのが古いのか do 記法を全く使っていないので、そこらへんを私風にアレンジしました。ソースを http://github.com/propella/prolog/tree に置いておきます。なお、言葉の使い方とか間違ってるかもしれないので気づいた人は教えてください。 実行 実行の仕方は Prolog.hs をダウンロードして、 runghc Prolog.hsです。food(apple). のようにするとルールに追加で、?- apple(X). で問い合わせ、??

    Prolog を Haskell で書く。 - 言語ゲーム
  • 1