タグ

ブックマーク / qiita.com/lotz (12)

  • テンソルを実装するのに表現可能関手がとても便利な件 - Qiita

    最近hmatrixで深層学習を実装する機会があったのですが、hmatrixはベクトルと行列しか提供していないので3階以上のテンソルが必要になって困るという場面に出くわしました。そこで自分で長さ付きベクトルを組み合わせてサクッとn階テンソルが作れると便利かな〜と調べていたら(素直にrepaやmassivを使えという話ではあるのですが )表現可能関手を使うことでn階テンソルとその演算が楽に(そして抽象的に)実装できるという文献1を見つけたので備忘録も兼ねてまとめておこうと思います。 この記事で紹介したコードは以下のGistで公開しています。 https://gist.github.com/lotz84/78474ac9ee307d50376e025093316d0f 関手、つまりFunctorのことですが、表現可能関手はその中でも特別な性質を持つものです。この記事は前半と後半に分けて、前半では

    テンソルを実装するのに表現可能関手がとても便利な件 - Qiita
  • fixで簡単にループを書く - Qiita

    常に文字列"hello"を返す関数の不動点(入力と出力が同じになる値)は"hello"です。(参考: Haskell/不動点と再帰) fixといえば無名関数で再帰を書く時に使われる例が有名だと思います

    fixで簡単にループを書く - 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
  • Selectionモナド入門 - Qiita

    Selectionモナドは2010年にEscardóとOlivaによって"Selection Functions, Bar Recursion, and Backward Induction"で紹介されました。継続モナドによく似ていますが少し違っており、ゲーム理論の解法の一つである後ろ向き帰納法や探索アルゴリズムなど色んなパターンを取り扱うことができます。transformersというよく知られたライブラリではControl.Monad.Trans.Selectというモジュールとして実装が提供されています。 Selectionモナドの型を見てみましょう。

    Selectionモナド入門 - Qiita
  • "アルゴリズムこうしん"のアルゴリズムをHaskellで実装する - Qiita

    この記事はCAMPHOR- Advent Calendar 2018の19日目の記事です。 データ構造とアルゴリズム Advent Calendar 2018の12日目の記事である"「アルゴリズムこうしん」のアルゴリズムを作成する"にインスパイアされて、Haskellで実装するとどうなるか考えてみました。 "アルゴリズムこうしん"とは アルゴリズムこうしんとは、NHK教育「ピタゴラスイッチ」の中で行われる体操のようなレクリエーションである。 (引用: ニコニコ大百科 - アルゴリズムこうしん) アルゴリズムこうしんは二人で一連の動作を組み合わせて行う体操で、フローチャートに起こすと以下のような感じです。 まぁフローチャートを眺めるよりも動画を見たらすぐに分かると思います。 通常は二人で行う体操ですが、二人である必然性はありません。この記事ではn人で行うアルゴリズムこうしんのアルゴリズムをプ

    "アルゴリズムこうしん"のアルゴリズムをHaskellで実装する - Qiita
  • コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita
  • Wizardモノイドとその仕組み - Qiita

    GHC 8.0からIO型がMonoidのインスタンスになりました。これを利用した便利なテクニックを、Gabriel GonzalezさんがThe wizard monoidとしてブログで紹介されています。 Wizardの意味は魔法使いですが、ソフトウェアをインストールする時とかに出てくるインストールウィザードのような対話形式で作業を誘導してくれるソフトウェアのことでもあります。WizardモノイドのWizardは後者の意味で使われています。 Wizardモノイド まず元の記事の流れに沿ってWizardモノイドを紹介したいと思います。以下のような例を考えてみましょう。 main :: IO () main = do -- 最初に全ての情報を入力してもらう putStrLn "名前は?" name <- getLine putStrLn "年齢は?" age <- getLine -- 最後に

    Wizardモノイドとその仕組み - Qiita
  • 作って学ぶBitcoin!ゼロから作るSPVウォレット - Qiita

    Bitcoinはもはや説明する必要がないくらいメジャーな存在になりました。その価格は2017/12/12現在で日円にして200万円を超えており1、技術的な知識を持っていない一般の人でも気軽に手に入れることができるようになりました。技術的な視点からみるとBitcoinそのものというよりもその基礎技術であるブロックチェーンが革命的なものであり単純な仮想通貨にとどまらない応用の可能性を秘めています。例えばEthereumはブロックチェーン上にプログラム(スマートコントラクト)をデプロイして実行できる環境であり、今年の12月にはCryptoKittiesというEthereumブロックチェーン上に実装されたゲームが大人気になりました。Lightning NetworkやPlasmaなどなど技術的な話題に尽きないのが盛り上がりを見せるブロックチェーン界隈の面白いところでありますが、今回はそのブロック

    作って学ぶBitcoin!ゼロから作るSPVウォレット - Qiita
  • Haskell入門。関数からモナドまで - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Haskell入門。関数からモナドまで - Qiita
  • Ladder of Functional Programming 〜関数型プログラミングのレベル分け〜 - Qiita

    LambdaConfがツイートにて関数型プログラミングのレベル分けを発表していました。今後LambdaConfから発信される発表にはこのレベルが表記され, 自分のレベルにあったコンテンツが探しやすくなるようです。このレベル分けはプログラマの優劣を付けるようなものではなく, 広く深い関数型プログラミングの世界で自分が今どのレベルにいるのかを適切に理解し次にどこに向かうべきなのかを知るのにたいへん役に立つものだと思います。 表を眺めてみると関数型プログラミングというよりかはHaskellのレベル分けのような印象も受けますが、広く知られるべきだと思ったので翻訳してみました。僕が未熟でトンチンカンな訳をしている箇所もあると思うので、何か見つけた場合は遠慮なくコメントや編集リクエストをお願いします LambdaConf Ladder of Functional Programming (LOFP)

    Ladder of Functional Programming 〜関数型プログラミングのレベル分け〜 - Qiita
  • Twitterを巡回していてわかったHaskell初心者が躓きやすいポイント8つ

    最近の趣味は「Haskellはいいぞ」と呟くかTwitter Search: Haskellを巡回して を押して回ることです 毎日巡回しているとHaskellに入門しようとするも細かいところに引っかかって前に進めないでいる人をちらほら見かけます。今回はそんな見回りの知見を活かしてHaskell初心者が躓きやすいポイントをまとめてみたいと思います。 1. 入門書は何がいいの? それはもうすごいH一択でしょう!…と言いたいところですが時々不満の声を聞くこともあります。確かにすごいHこと『すごいHaskellたのしく学ぼう!』は世界一わかりやすいHaskell入門書であることは間違いないと思いますが、逆に内容が平易すぎるため記述が冗長だと感じたり読み終わっても何か自分で作れるようになった気がしなかったりするかもしれません。なので僕は「プログラミングも初心者でHaskellから入門してみたい」

    Twitterを巡回していてわかったHaskell初心者が躓きやすいポイント8つ
  • 【型レベルWeb DSL】 Servantの紹介

    Note 2018-07-28: 最新の lts-12.2 で動くようにサンプルコードを修正しました。 Haskellは型の表現力がとても高い言語です。 型をうまく使えば意図しないプログラムがコンパイルできないように設計することが出来ます。ServantはWebアプリがどのように振る舞うかを型で設計するためのDSLです。APIと対応した型を作ることで間違いが少なくなるだけでなく様々なボイラープレートを型から生成することも出来ます。特殊な外部ファイル等は必要無く全てHaskellの文法で完結します。まさに型の表現力が高いHaskellでしか作れないライブラリです。 Servantの特徴としてチュートリアルでは以下の4つが挙げられています。 concision (簡潔である) flexibility (汎用的・柔軟性がある) separatation of concerns (関心の分離) t

    【型レベルWeb DSL】 Servantの紹介
    k0yoshitsugu
    k0yoshitsugu 2015/12/09
    使い勝手よさげ
  • 1