タグ

haskellとHaskellに関するrydotのブックマーク (380)

  • Writing JavaScript games in Haskell

    Hi, welcome to the 6th article of this blog. In this blog post, the breakout example from the last Post has been improved, giving it more features: The Paddle and Blocks have rounded edges. The ball bounces of them depending on the surface normal where it hits. The blocks are fading out when destroyed. The paddle can shot to destroy blocks. When the game starts one shot is available, shots can be

  • さらば愛しき JavaScript —— 愛と欲望の果てに Haskell は fay と出逢う。 - これは圏です

  • 実装して理解する遅延評価の仕組み 〜 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を実装!? - プログラムモグモグ
  • 「Haskell信者」にその素晴らしさを熱く語られたときの平和で適当なかわし方

    Haskellほど、ハマってる人と興味がない人との温度差が激しいものはないと言えるでしょう。 はまっている人の中には、「Haskell の素晴らしさをもっと広く伝えなければ!」と言う使命感を抱いて、 ことあるごとに啓蒙活動に励もうとする“信者”が少なくありません。 その博愛の気持ちは尊いといえば尊いのですが、勧められる側がさほど Haskellに興味がない場合は、 どう対処していいのか困ります。今日も全国各地で、 Haskell信者の熱い勧誘を受けて、 勧められる側が苦笑を浮かべているという構図が繰り広げられていることでしょう。 Haskellに興味がない側のあなたが、 そういう災難にあったときはどう対処すればいいのか。 信者の勧誘に対する平和で適当なかわし方を考えてみましょう。 「Haskell様」を否定するのは危険 程度の差こそあれ、「Haskell」を熱く勧めたがる信者の皆さんは、

  • GHC でスタックトレース - あどけない話

    これまで GHC では、スタックトレースを取ることが有効なデバッグ方法ではなかった。 なぜなら遅延評価では、(再帰であってもなくても)末尾呼び出しは単なるジャンプになるから、スタックを使わないのである。スタックに戻る場所を積むのは、case と of の中で評価される式だけだ。(つまり、ここは正格に評価される。) この問題を解決するために GHC 7.4.2 から、わざわざスタックにログを残して、スタックトレースが取れるようになった。すなわち、最新の Haskell Platform をインストールしていれば、この機能を使えるということだ。 例として、以下のプログラムを考えよう。 module Main where main :: IO () main = print $ foo 3 + 1 foo :: Int -> Int foo x = x * 2 + bar x bar :: In

    GHC でスタックトレース - あどけない話
  • 絵で見るモナド · eed3si9n

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

  • Things that amuse me

    Quicksort in Haskell Quicksort is a commonly used example of how succinct Haskell programming can be. It usually looks something likes this: qsort :: (Ord a Bool) => [a] -> [a] qsort [] = [] qsort (x:xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs) The problem with this function is that it's not really Quicksort. Viewed through sufficently blurry glasses (or high abstraction altitu

  • Haskellでメモ化する(中級)

    前回のpostで、Haskellでメモ化する方法について書きました。そのとき、疑問点として、「なんで、メモ化と不動点が繋がってるねん!なんでやねん!」というのがありました。その疑問が解決したので中級編を書きます。 どうやら不動点コンビネータを利用してやりたいことは、「任意の関数が与えられたときに、その計算をメモ化する関数を作成する」ということのようです。この発想にはびっくりです。どれだけ抽象度の高いことをやるんだよ。という感じです。imparative、あんど、object-orientedな思想に育てられた(毒された?)普通のプログラマーである私には思いもよらない発想でした。。

  • Haskellでメモ化する(初級)

    1つは、参照透明性による壁。Haskellには副作用がないため、再代入ができない。つまり、メモ化する対象を更新していくというような作業ができないのです。外部変数を用意して、その外部変数に計算した値を格納していくという方法は通じないのです。。

  • Memoization - HaskellWiki

    Memoization is a technique for storing values of a function instead of recomputing them each time the function is called. Memoization without recursion You can just write a memoization function using a data structure that is suitable for your application. We don't go into the details of this case. If you want a general solution for several types, you need a type class, say Memoizable.

  • Haskellでメモ化を行うもう一つの方法 - 純粋関数型雑記帳

    はじめに Haskell で動的計画法を書くための3つの方針 - tosの日記 これを読んで、私もちょっと前にHaskellでメモ化をやる方法を考えていたことを思い出したので、書いてみることにします。 Haskellでのメモ化は、私のかなり昔の駄文(リアルにびっくりするほど駄文なのでご注意。メモ化の綴りも間違ってます)や、このあたりに日語の文章があります。 これらのページでのメモ化実現方針は、1. 計算済み値を保持するテーブルをMapなどを用いて用意する 2. そのテーブルを副作用を用いて更新する、というものになっています。なるほど、これは手続き型言語との対比でとても直接的な実装です。しかし、テーブルを更新するために関数全体がモナドになってしまったりして、あまり使い勝手が良くなさそうです。モナドであることを悟らせないために、演算子をモナド化したり、あるいはモナドじゃなくするためにunsa

    Haskellでメモ化を行うもう一つの方法 - 純粋関数型雑記帳
  • Stricter Haskell - www.kotha.netの裏

    なにこれ Haskellは素敵な言語だと思うが、デフォルトが遅延評価であることに起因する欠点のせいで魅力を50%くらい損なっているように見える。具体的にはサンク構築/評価のオーバーヘッドとメモリリークで、特にメモリリークの実害は大きい。ならば必要な所以外で評価を遅延させないコーディングをすれば、うっかりメモリリークを作ってしまう確率を減らせるに違いないというのがこの記事の主旨。 既に発生してしまったメモリリークに対処するのは別の問題で、有効な方法も全然違うだろう。 原則 特にそうしない必要のない限り、サンクを作ったらすぐ壊す。つまり、 let x = f y と書く代わりに、 let !x = f y と書き、 return (f x) と書く代わりに return $! f x と書く。 評価の責任 基的に、サンクを作った者がそれを壊す責任を負うことにする。つまり、関数引数は呼び出し側

    Stricter Haskell - www.kotha.netの裏
  • https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf?from=https://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/history.pdf&type=exact

  • http://sebfisch.github.io/haskell-regexp/regexp-play.pdf

  • 第7回 スタートHaskell2 (最終回)

    和彦 @kazu_yamamoto 次の日曜日は「スタートHaskell2」の最終回です。どなたかZipperの章を発表しませんか?木構造で親へのポインタがなくても困らない理由がわかるかもしれませんよ。 #start_haskell http://t.co/LI4YNp4s 2013-01-17 09:45:54 saltheads @saltheads あらっ土曜日だと思っていたら日曜日なんですね。あやうく間違うところでした。 QT 第7回 スタートHaskell2 (最終回) - [PARTAKE] #start_haskell http://t.co/YNwfXvAn @partakeinさんから 2013-01-17 12:59:33 Seizan Shimazaki @seizans 明日はスタートHaskell2最終回です。発表者は決まりました。LTは募集中です。参加者も引

    第7回 スタートHaskell2 (最終回)
  • 第50回 並列プログラミングにおける抽象化と細かい制御のトレードオフ

    Haskellは遅延評価を特徴としています。しかし,どのような機能にも弱点はあります。第9回や第47回では,遅延評価自体が持つ弱点や,その問題を解決しようとした際に生じる問題点について解説しました。 同様に,並列Haskellやデータ並列Haskellといった,GHCで提供されている並列処理の機能にも弱点があります。また,その問題を避けるために開発されたライブラリにも,相応の弱点があります。 並列Haskellが提供する並列処理機能の抽象化能力は極めて強力ですが,抽象化され過ぎていて並列処理の制御が難しいという問題があります。一方,より低レベルの並列処理機能は,並列処理を直接制御できるものの,並列処理の抽象化能力が乏しく,大規模なプログラムを並列化するのは困難です。 このように,現在のHaskellの並列処理機能は,理想的とはいえません。高速な並列プログラムをなるべく短期間で作成するには,

    第50回 並列プログラミングにおける抽象化と細かい制御のトレードオフ
  • jhc

    Jhc Haskell Compiler How to install The Manual jhc is a haskell compiler which aims to produce the most efficient programs possible via whole program analysis and other optimizations. Using Jhc See the Installation Page for information about downloading and installing jhc. For information on running jhc, see The User's Manual. Join the jhc mailing list for jhc discussion, announcements, and bug re

  • Inemuri nezumi diary(2011-02-17)

    _ GHC interactive debugger GHCi を補強する GOA package IRC上のHaskell対話bot:Lambdabot をローカルに端末の上で動かし、GHCiと対話するパッケージ GOA というものがあります。 が、GOA は cabal ではすんなりはいらないんですよね。手元にちいさなミスを修正したものを作っていたのですが、今日もらった機会に Github で公開しました。 lambdabot は導入に困らないと思うので(困るのでしたら連絡を)、lambdabot をインストールした後で、GOA も試してみてはいかがでしょうか。 % git clone git://github.com/IKEGAMIDaisuke/goa で、ソースが手に入ります。build やインストールのしかたは README をお読みください。できることの一例を下に示します:

  • Haskell@WCIMH

    ./index.html ../index.html 無謀にもHaskellに挑戦したときのNote まず何も言わずにここを読んで下さい。 次はここです。 僕は上記ページ以上の説明をする自信は無いので、全く意味不明だった人はここでさらばです。 上記をカケラでも理解した気になったらこっちでHugsをインストールしてください。 僕は素人です。 それも、情報工学のじの字も知らない素人です。 ここで挙げたURLのどれかひとつでも既に知っていた人にはここでやるような内容は幼稚過ぎます。 しかし読むなとはいいません。 間違いを見つけたら教えて欲しいから。 いちおう枕詞を書いておきますと、オブジェクト指向と言われる最近の言語も、FORTH, Mindのようなスタック型言語も、BASICのような非構造化な手続き型言語も、Pascalのような構造化言語も、すべて逐次実行型であることは疑いようの無い事実です。

  • Haskell で可変長引数を扱う方法

    一口に可変長引数と言っても色々あります。限られた範囲でのオプション引数が欲しいこともありますし、多相的な物の可変長引数が欲しいこともあります。また、可変長引数を型安全に使いたいのか、型安全性を無視してでも使いたいのか、という話もあります。このようにどういうことをしたいかによって、可変長引数を実現するために採用するべき手段は異なってきます。ここにある程度情報をまとめておきましたので、是非参考にしてみてください。

    Haskell で可変長引数を扱う方法