タグ

haskellに関するrydotのブックマーク (379)

  • 自動微分を実装して理解する(後編) - Qiita

    この記事はFOLIO Advent Calendar 2018、21日目の記事です。昨日はhajipionによる大規模デザインカンファレンス「デザインシップ」の着想から開会まで、超ダッシュで振り返る10ヶ月! #Designship2018でした。 この記事は近年話題に上がることが多くなってきた自動微分を実際に実装することでより理解を深めようというものです。前回の自動微分を実装して理解する(前編)では自動微分の定義とフォワードモードの実装を見てきました。今回はリバースモードの自動微分の実装にチャレンジしてみましょう。 リバースモード 現実世界(特に機械学習)の関数は一般的に出力の次元より入力の次元のほうが圧倒的に多いので、フォワードモードよりリバースモードの方が効率面で優れている場面が多々あります。しかし一般的なリバースモードの実装方法では数式を組み立てた順番を計算グラフとして保持する必要

    自動微分を実装して理解する(後編) - Qiita
  • 自動微分を実装して理解する(前編) - Qiita

    近年、機械学習への応用により自動微分の技術が再び脚光を浴び始めています1。例えばDeepLearningを微分な可能な関数の組み合わせ論へと発展させた微分可能プログラミング2では、プログラミングにより実装した関数の導関数を求める操作が基的な役割を果たしています。この記事では自動微分に対する理解をより深めるために、自動微分のアルゴリズムをゼロから実装していきたいと思います。

    自動微分を実装して理解する(前編) - Qiita
  • 動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜 - Qiita

    トロピカル半環と呼ばれる代数構造上のトロピカル行列を利用すると動的計画法を使ってグラフの最短経路の距離を計算するという問題が単純な行列積で解けてしまうらしい。そんな噂12を聞きつけて我々はその謎を解き明かすべく南国(トロピカル)の奥地へと向かった。 トロピカルな世界に行くためにはまずは代数を知る必要がある。要するに群・環・体の話だ。しかしこの記事の目的は代数学入門ではないので詳しい話は他の記事3に譲るとし、さっそく半環という概念を導入する。それは 半環は以下の性質を満たす二つの二項演算、即ち加法(和)"$+$" と乗法(積)"$\cdot$" とを備えた集合$R$を言う $(R, +)$ は単位元 $0$ を持つ可換モノイドを成す: $(a + b) + c = a + (b + c)$ $0 + a = a + 0 = a$ $a + b = b + a$ $(R, \cdot)$ は単

    動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜 - Qiita
  • GHCのforallと多相性への対処 - Qiita

    GHCのforallには一見複数の意味があるように思われます: 関数シグネチャのforall RankNTypesによるforall ExistentialQuantificationによるforall けどまあ基的な考え方は同じで問題ないと思ってます。 関数シグネチャのforall Haskellで関数の型シグネチャに現れる変数は、暗黙に量化されます。

    GHCのforallと多相性への対処 - Qiita
  • Typeable and Data in Haskell

    Data.Typeable and Data.Data are rather mysterious. Starting out as a Haskell newbie you see them once in a while and wonder what use they are. Their Haddock pages are pretty opaque and scary in places. Here’s a quick rundown I thought I’d write to get people up to speed nice and quick so that they can start using it.1 It’s really rather beautiful as a way to do generic programming in Haskell. The

  • multi-promptな限定継続 in Haskell (失敗編&成功編) - keigoiの日記

    multi-promptな限定継続の方が型がわかりやすい件について。 なんだかshift/resetの型付けはむつかしいなーと思っていた。 限定継続のOCaml実装を見てみたくて、Olegさんのdelimccライブラリとその論文を眺めていた。 こちらはmulti-promptな限定継続といい、複数の限定継続を同時に扱える体系の実装なのだけど、こちらの方が型が分かりやすかった。 理論的基礎はDybvig, Peyton Jones, Sabryの論文で、cc-delcontというHaskell版の実装がHackageにある。この実装も indexed monad ではなく普通のモナドなので型は理解しやすいはず。 これらのライブラリでは、 newPrompt, pushPrompt, withSubCont, pushSubCont の 4つのプリミティブを使う。また扱うデータ型も、「プロンプ

    multi-promptな限定継続 in Haskell (失敗編&成功編) - keigoiの日記
  • プログラミングにおけるモナドの初期の歴史について - 再帰の反復blog

    P. Wadler "How to Replace Failure by a List of Successes" (1985) E. Moggi "Computational Lambda-Calculus and Monads" (1988) M. Spivey "A Functional Theory of Exceptions" (1990) E. Moggi "Notions of Computation and Monads" (1991) P. Wadler "The Essence of Functional Programming" (1992) S. Peyton Jones、P. Wadler "Imperative Functional Programming" (1993) あたりのこと。 目次: E. Moggi "Computational Lambda-Ca

    プログラミングにおけるモナドの初期の歴史について - 再帰の反復blog
  • TLS 1.3の標準化と実装 | IIJ Engineers Blog

    IIJ-II 技術研究所 技術開発室の山です。現在技術開発室は、私を含めた4人で構成されており、主にプログラミング言語Haskellを使って開発を進めています。今回の話題である TLS(Transport Layer Security) 1.3 もHaskellで実装しました。 4年の歳月をかけて議論されてきたTLS 1.3ですが、この8月にめでたく仕様がRFC 8446となりました。貢献者リストに私の名前が載っていることを聞きつけた広報から、ブログ記事の執筆依頼がありましたので、TLS 1.3の標準化や実装の話について書いてみます。 なぜTLS 1.3を標準化する必要があったのか理由を知りたい方は、「TLSの動向」という記事や「TLS 1.3」というスライドを読んで下さい。 インターネットで使われているプロトコルは、IETFという団体で仕様が議論されて策定されます。IETFには、誰でも

    TLS 1.3の標準化と実装 | IIJ Engineers Blog
  • Write You a Haskell ( Stephen Diehl )

    There is nothing more practical than a good theory. — James C. Maxwell Hindley-Milner Inference The Hindley-Milner type system ( also referred to as Damas-Hindley-Milner or HM ) is a family of type systems that admit the serendipitous property of having a tractable algorithm for determining types from untyped syntax. This is achieved by a process known as unification, whereby the types for a well-

  • 週刊 代数的実数を作る

    トゥート Feed このページについて これは、筆者 (@mod_poppo) が代数的実数をプログラミング言語上で実装する過程を、一連の記事として連載するものである。#16 までは「週刊」ということで定期的な連載を目指していたが、それ以降は不定期連載となる。 書籍化 2018年10月8日の「技術書典5」にこの連載を書籍化したものを出しました(加筆訂正あり)。詳しくは 技術書典5に代数的数を作るを出します を参照してください。 BOOTHでPDF版を購入・ダウンロードできます(1000円)。詳しくは以下のリンク先を参照: 「代数的数を作る 多項式の根と因数分解のアルゴリズム」 目次 #0 イントロダクション (2017年10月14日) 計算可能実数 #1 一変数多項式環 (2017年10月14日) 一変数多項式環, ホーナー法, ユークリッドの互除法, 係数膨張 #2 実根の数え上げ (

  • 快速のExtensible effects - モナドとわたしとコモナド

    extensibleは拡張可能レコードだけでなく拡張可能作用(extensible effects)も用意している。拡張可能作用は一時期Haskell界隈で話題になったものの、今では人気も下火になってしまった。新しいバージョンをリリースした今、拡張可能作用の動機と使い方について改めて紹介しよう。 難行の一次関数 Haskellでモナドをカスタマイズする方法としては、transformersのモナド変換子がよく使われている。モナド変換子は、モナドをパラメータとして取り、新たな能力を付与したモナドにする構造だ。例えば、StateT sはモナド変換子の一つである。任意のアクションm aはliftを使ってStateT s m aに変換できる。 newtype StateT s m a = StateT { runStateT :: s -> m (a, s) } 他にもReaderT, Write

    快速のExtensible effects - モナドとわたしとコモナド
  • Haskellらしさって?「型」と「関数」の基本を解説!【第二言語としてのHaskell】 - エンジニアHub|Webエンジニアのキャリアを考える!

    Haskellらしさって?「型」と「関数」の基を解説!【第二言語としてのHaskell】 第二言語としてHaskellを学ぶ道案内。開発環境の準備から、Haskellらしいプログラミングの考え方まで、Haskell-jpのigrepさんが丁寧に解説します。 こんにちは。Haskell-jpの山悠滋です。 この記事では、すでにプログラミング経験のある方向けに、第二言語としてHaskellを学ぶ道案内をしていきます。 環境の準備や、自明なサンプルプログラムの紹介にとどまらず、Haskellらしいプログラミングの考え方も伝えていく予定です。 Haskellについて Haskellというと、「関数型」というキーワードが思い浮かぶ方も多いと思います。 確かにHaskellは、すべての関数がカリー化されており、それらを組み合わせてプログラムを書いていく関数プログラミングがしやすい言語です。 しかし

    Haskellらしさって?「型」と「関数」の基本を解説!【第二言語としてのHaskell】 - エンジニアHub|Webエンジニアのキャリアを考える!
  • Iterator パターンの本質 · eed3si9n

    2011-12-17 これは Scala Advent Calendar 2011 の 17日目の記事です。 specs2 の作者であり、@etorreborre としても活発に発言を続けるシドニーの強豪 Eric Torreborre さんが書いた “The Essence of the Iterator Pattern” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2011年6月24日 Eric Torreborre 著 2011年12月17日 e.e d3si9n 訳 去年読んだ論文で一番気に入ったのは “The Essence of the Iterator Pattern”(以下、EIP)だ。これを読んだ後で、今まで何年も使い続けてきたあるものに対する考えがガラリと変わった。それは、for ループだ。 この論文の中からいくつか

  • 日本Haskellユーザーグループ - Haskell-jp

  • HaskellのIOは他の言語でいうところの関数オブジェクトとよく似てるよ、という話 :: Igreque -> Info

    HaskellのIOは他の言語でいうところの関数オブジェクトとよく似てるよ、という話 by Yuji Yamamoto on January 28, 2017 HaskellのIOは奇妙です。 「純粋な関数だけでプログラムが書けるの?」と多くの方が疑問に思うように、実際のところ、副作用のある操作(入出力。ファイルの読み書きやネットワーク通信など)をしなければ、役に立つプログラムは一切書けません。 Haskellではそのものズバリ「IO」という機能を使ってそれを実現します。 しかし一方でHaskellは「純粋」なので副作用が一切ない、とも言われます(例えばWikipediaのこの辺の説明)。 その辺のややこしい問題について、かの「プログラミングHaskell」の訳者、山和彦さんの記事では、下記のように解説されていました(原文のままコピペしています)。 Haskell の IO では、評価と

  • JJUG CCC 2017 Spring で Haskell on JVM について話してきました - チェシャ猫の消滅定理

    先日行われた JJUG CCC 2017 Spring で、JVM 上で動作する Haskell について発表してきました。 思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8 from y_taka_23 www.slideshare.net メインになるコンテンツはふたつの JVM 言語、Frege と Eta です。 今回はあくまでも Java のイベントなので、発表前半では Haskell の基概念、特にモナドについてそれなりの時間を割いて説明してみました。さらにそれを踏まえて後半ではモナドを利用した Java ライブラリの呼び出しに焦点を当て、Frege と Eta それぞれの戦略の違いについて解説しています。 そもそも Haskell on JVM というマニアックで Java そのものと無関係なテーマ、かつ時間的に最後の枠というこ

    JJUG CCC 2017 Spring で Haskell on JVM について話してきました - チェシャ猫の消滅定理
  • Haskellは真面目なアプリケーション開発に向いている - syocy’s diary

    qiita.com ↑の記事で(主題ではないと思うものの)Haskellの批判に結構な分量が割かれていて、その批判のなかに「ちょっと違うんじゃないかな」という点がいくつかあったので反論ぽいことを書きます。 "Haskell は真面目なアプリケーション開発には向いてない"について これには多分いくつか事例を挙げればよくて、 Facebook ではスパム等の攻撃と戦うためのシステムを Haskell で作っています。 Fighting spam with Haskell | Engineering Blog | Facebook Code | Facebook (この記事を書いている Simon Marlow 氏は Haskell および GHC の主要開発者) より「アプリケーション」な事例が必要なら、プレゼンツールの Prezi を挙げることができます。 Case Study - Hask

    Haskellは真面目なアプリケーション開発に向いている - syocy’s diary
  • Haskell-jp wiki - データ構造列伝

    Haskellの世界にはたくさんのデータ構造があり、魅力の一つであるとも言える。とは言え、どれを使えばいいのかは悩みの種。Haskellで実装されている様々なデータ構造の特徴と使い方を紹介する。 リスト 難易度: ☆ 誰もが真っ先に触れるであろうデータ構造、リスト。順番に処理したいデータをまとめる構造としては王道中の王道だ。また、多くのデータ構造はリストとの相互変換をする関数を提供している。 リストを構築する手段は多数ある。 コンストラクタ(:)と[]で直接構築する リテラル [0,1,2,3] FromThenTo記法 [0,2..12] 構築関数 unfoldr, iterate, replicate, repeatなど 逐次的な処理のための表現だけでなく、他の構造への橋渡しとしてもリストは重要な役割を担っている。 利点 扱いが簡単で、リストを取るまたは返す関数がたくさんある 欠点 正

  • https://aiya000.github.io/posts/2017-05-06-learn-haskell-with-muse.html

    https://aiya000.github.io/posts/2017-05-06-learn-haskell-with-muse.html
  • Writerを使ってはならない - Qiita

    2022-05-20追記: mtl-2.3, transformers-0.5.6以降においてリークの起こらないCPS版Writerが提供されているのでそちらを用いてください: https://hackage.haskell.org/package/mtl-2.3/docs/Control-Monad-Writer-CPS.html https://hackage.haskell.org/package/transformers-0.5.6.0/docs/Control-Monad-Trans-Writer-CPS.html Writer Monadの問題点 Haskell スペースリーク アドベントカレンダーX日目(X ~ 360)です。 Writer Monadを使ってはならないという話があります。 理由は単純で、スペースリークが発生するためです。 以下の単純なアクションを評価してみま

    Writerを使ってはならない - Qiita