タグ

func*に関するsh19910711のブックマーク (192)

  • Akka Streams についての基礎概念 - Qiita

    Akka Streams が2.4以降からexperimentalを外して、正式版をリリースしました。丁度会社で3日のHackerDaysを機に、Akka Streams を勉強しはじめました。 この記事では、AkkaStreamの公式ドキュメントを抜粋し、翻訳しながら、AkkaStreamの基礎概念を説明します。 Akka Streams ってなに 背景 今のInternet上、我々は膨大なデータを消費している。その大量のデータを人々はビッグデータと呼んでいるw。 もう昔みたいにデータを全部ダウンロードして処理、処理完了してアップロード的な処理は時間掛かりすぎ、そもそも一台のサーバに保存しきれないデータは処理できないので、Streamみたいな流れとしての処理が必要になっている。 Akkaが使うActorモデルもその一例、データを分割し、メッセージとしてActorに送る、Actorは只々流

    Akka Streams についての基礎概念 - Qiita
    sh19910711
    sh19910711 2024/05/02
    "Akka Streams: バージョン2.4以降、APIを一新 + experimentalでなくなった / SourceとFlowを繋げば、新しいSourceになる、FlowとSinkを繋げば、新しいSinkになる、すべて繋げば、 RunnableFlow になる" 2016
  • 関数型言語XQueryで大量のXMLを楽にさばく - Qiita

    まえがき オープンデータ隆盛のこのご時世、意外と XML でデータを公開しているケースは多い。 XML形式で公開されているオープンデータを扱う際に XMLデータベース の一つである BaseX を活用してみた経験についてざっと書いてみる。 公開されている実世界のオープンデータを、事前知識なしで扱うのはなかなか大変だ。ドキュメントが整備されていなかったり、不揃いであったりして、ざっとデータの傾向を見てみないと活用しづらいケースが多々ある。 しかし、 帯域幅の制限もあって一回のアクセスでは十分な量のデータを得られない API があまり作り込まれていないため、欲しい情報をピンポイントで得るための検索ができない などというのは日常茶飯事だ。 そこで試しにちょっとしたスクリプトを書いて、まとまった量のデータをマイルドな周期でダウンロードすることになるけれど、 書き捨てのスクリプト一々書くのは億劫だ。

    関数型言語XQueryで大量のXMLを楽にさばく - Qiita
    sh19910711
    sh19910711 2024/04/29
    "テンポラリーなXMLの格納場所として XMLデータベースを使う / BaseX: XMLデータベース + XQuery が案外リッチで書いていて楽しかったり、同時に大量の XML ファイルを解析できて楽" 2015
  • どうやってPureScriptに慣れたのか - oreshinyaのブログ

    はじめに PureScript Advent Calendar 2017 - Qiitaの1日目の記事が埋まっていなかったので大急ぎで書くことにしました。 元々はRubyJavaScriptなどの動的言語をメインでメシをべているプログラミング的ゆとり世代であった私が、 少なくとも一般論としては学習が大変だと評されているPureScriptを、 (上手いか下手かは別として)普通に書けるようになった要因を記憶の限り辿ってみようと思います。 つまり、この記事は、「最初からPureScriptの勉強のためにやっていた」ということではなく、「たまたまそういう道を通ったけど、 あれがよかったのかもしれない」という回想です。 道のはじまり この道のはじまりはHaskellでした。 特に仕事で使うわけでもなく、関数型言語に興味があったわけでもなく、ただなんとなく暇を持て余していたので暇つぶしとして思い

    どうやってPureScriptに慣れたのか - oreshinyaのブログ
    sh19910711
    sh19910711 2024/04/27
    "Haskell: PureScriptよりも親切なエラーメッセージ + 調査に困らないし、コンパイラが勝手に訓練してくれます / Elm: ブラウザという戦場ではどこでどのように型付けしているのか、という世界観をつかむ" 2017
  • GHCのソースコードのノートを読むやつを作った

    タイトルがふわっとしてるけど見れば多分わかる。 ghc-compiler-notes 経緯とか 注意: 作ったと書いてるが私の力ではなく主に水無さん(@mizunashi-mana)とわどさん(@waddlaw)のお力添えによるところが大きい。 GHCのソースコードにはNoteと称して有益な(GHCの内部実装等に関する)情報が書いてあることは有名だと思うけど、実際にそれはまとまったりはしてなかったので知る人ぞ知る、みたいな情報であった。こういう他のドキュメントには書いてないような貴重な情報が誰にも読まれることなく眠っているのはもったいないと常々感じていたのでそれを読めるようにしたかった。 このプロジェクトは最近GitLabに移った方のghc/ghcのソースコードに埋められているNotes部分を抜粋しそれを比較的読みやすい形で並べて整理したものである。 現在の仕様一覧(ざっくり) compi

    sh19910711
    sh19910711 2023/04/09
    2019 / "GHCのソースコードにはNoteと称して有益な(GHCの内部実装等に関する)情報が書いてある / こういう他のドキュメントには書いてないような貴重な情報が誰にも読まれることなく眠っているのはもったいない"
  • パッケージマネージャを自作するときに考えること - gfnweb

    プログラミング言語を自前で創っていると,パッケージマネージャが欲しくなってくるものだ.既存パッケージマネージャやそのラッパーによる配布で事足りることも多いが,自前言語の要件とうまく合わなかったりして,真に自分で実装せねばならないこともある.そうした場合,パッケージマネージャをどんな設計にすべきだろうか? 言語固有の都合には触れずになるべく一般に考慮すべき事項を洗い出し,簡単な設計例も提示してみたい. なお,稿はパッケージマネージャの設計に焦点を当てたものであり,効率的に依存制約を解消するアルゴリズムなど実装の詳細については解説しない.実際例えばOCamlでは 0install-solver というOPAMの裏でも使われているパッケージを利用すれば制約解消アルゴリズムそのものに踏み込まずとも制約解消処理を実装でき,(それ自体に興味があるときを除けば)必ずしもアルゴリズムを理解する必要はない

    sh19910711
    sh19910711 2023/04/05
    "プログラミング言語を自前で創っていると,パッケージマネージャが欲しくなってくる / 0install-solver: OPAMの裏でも使われているパッケージ + 制約解消アルゴリズムそのものに踏み込まずとも制約解消処理を実装でき"
  • Haskellにはそもそも+++という演算子が存在する - Qiita

    JavaScriptで+++は許されない+ ++は許される を読んで書きましたシリーズです。 +++演算子の説明 Haskellには、+++は許される/許されない以前に、まさにそのような演算子が存在します。 これはControl.Arrowモジュールで定義されているArrowChoice型クラスのメソッドであり、次のような型を持つ演算子です。 (+++) :: ArrowChoice a => a b c -> a b' c' -> a (Either b b') (Either c c')

    Haskellにはそもそも+++という演算子が存在する - Qiita
    sh19910711
    sh19910711 2023/02/24
    2020 / "Haskellでは、かなり高い自由度で自分の好きな二項演算子を定義することができます / 普通の足し算に物足りなくなったら、++++++++++演算子を定義 / 演算子が何を意味しているのかで悩む"
  • GHCに初めてコントリビュートした/最近のGHC動向 | 雑記帳

    事実上の標準デファクトスタンダードなHaskell処理系であるGHCに貢献するというのが去年掲げた目標だったが、それがようやく実現したので報告する。ついでに、最近のGHC開発状況についても簡単にまとめてみる。 「貢献」と言っても色々あって、バグ報告とかも立派な貢献なのだが、ここで目標としていたのは「書いたコードをGHC体に取り込んでもらう」ことである。 一つ目:fromInteger :: Integer -> {Float,Double} 年末に書いた記事 Haskell/GHCでの浮動小数点数の扱い – Qiita にあるように、現行のGHCのfromIntegerは値の大きさによって丸め方法が違っている。それによってどういう問題が引き起こされるかというと、 import Numeric import Data.Word main = do putStrLn $ "literal :

    sh19910711
    sh19910711 2023/02/14
    2021 / "GHCの場合は特に2番目(CI)がなかなか厄介で、謎の理由で失敗したりする / 時間のかかるCIがランダムに失敗するとかなり虚無なので、開発者陣の間でも問題視されている"
  • F#を4ヶ月ほど学んでみて - Shohei Yoshida's Diary

    今年に入って新しい言語を学ぶかということで F#の勉強を初めて 4ヶ月ほど経ったので現状のまとめ。 やったことは主に小さいプログラムを書いたり, LeetCodeの問題を 100問ほど解いたという程度(LeetCodeは現状 F#未対応なので対応してほしい)。 結論としては始めるのが楽で学ぶ価値のある言語だと考えています。 書いたもの https://github.com/syohex/dotnet-study/tree/master/fsharp 良い点 セットアップが楽 .NET SDKを入れて PATHが通って入ればどの環境(Win, macOS, Linux)でも始められる。あとはVSCodeに Ionide拡張を入れるだけで OK. 1ファイルからコードを書ける いちいちプロジェクトを作らなくても .fsxファイルを作って書き始められるのが良い REPLベースの開発 Java系言

    F#を4ヶ月ほど学んでみて - Shohei Yoshida's Diary
    sh19910711
    sh19910711 2023/02/04
    2022 / "ループでなく再帰を使うというのは良い刺激に / 副作用を使えると一つのことにいろいろ詰め込んで書けてしまうけど, そうではなく副作用がないように分割して考えるということを意識するようになった"
  • 確率的プログラミングその3、Making Money Using Mathを読んだ

    dipplの話とか難しいなぁ、とか行ってたら、なんかomo先生がHaskell使えば余裕ですよ!Erik Meijerも言ってた!とか言ってこの文書のurlを勧めてきた。 Making Money Using Math その時はHaskell厨乙、とか思ってちらっと見ただけでスルーしてたが、その後別の所でACM Queueで一番読まれた記事だよ!みたいなツイートが流れてきて、へぇ、と思って読んで見る事にしたら、これが素晴らしかった。 なお右上のリンクからpdfが落とせて、これだと文字化けとかも無いのでオススメ。 まず、以前確率的プログラミングその2、probmodsの最後で自分が書いたぼんやりした認識がもっとずっとちゃんと書かれていて、しかもエレガントで感動した。 JPTのような物、と自分が言っていた事をlistモナドのような物、として扱う。 これがリストで無い事は誰の目にも明らかだが、モ

    sh19910711
    sh19910711 2023/01/29
    2018 / "これまでの人生で関数型プログラミングの知識が実務で明らかに必要、 と感じたのはパーサーコンビネーター使う時とSpark使う時くらいで、 両者もその辺なしでもとりあえずは生き残れる感じだった"
  • モデルとアルゴリズム、圏と関手と自然変換 - xiangze's sparse blog

    お正月気分が抜けないのでほわっとした記事を書きます。 prompton.io モデルとアルゴリズムの素朴な理解 圏論による理解 構造を保ったデータの学習 Haskell(とscala)プログラミング情報 圏論やHaskell得意な人から見た機械学習、統計モデリング 微分可能な計算の一般化 その他雑感と宣伝 課題 モデルとアルゴリズムの素朴な理解 機械学習や統計におけるモデルとアルゴリズムの違いを説明するときに学習、分析の対象をパラメータを使って数式で表現したものがモデルで最適なパラメーター値を探索する方法、プログラムが(最適化)アルゴリズムであるとしていました。 しかしネットを見ていると「データをアルゴリズムに投入して、できたロジックがモデル」といった説明も見かけます。これではアルゴリズムによる学習をする前にモデルは存在しないように聞こえます。stanによるベイジアンモデルの記述やpyto

    モデルとアルゴリズム、圏と関手と自然変換 - xiangze's sparse blog
    sh19910711
    sh19910711 2023/01/13
    "モデルとアルゴリズムに対する素朴な考えをより精密に、プログラミングに近い言葉で表現する数学の分野として圏論(Category Theory)というのがあります(あるそうです) / 圏論は普通に暮らしていくには不必要に難しい"
  • Haskell の 3 つのバナナ - Qiita

    この記事は Haskell Advent Calendar 2019 の 16 日目の記事です. Haskell プログラマとして知っておくべき 3 つのバナナを紹介します. その 1: Arrow のバナナ その 2: FRP のバナナ その 3: F-代数のバナナ その 1: Arrow のバナナ 1 つめのバナナは,型クラス Arrow のためのバナナです. Arrows: A General Interface to Computation Arrow は,モナドの一般化として Hughes [1] により定義された概念です. Haskell では型クラス Arrow として定式化されており,GHC では Arrow のための記法を Arrows 言語拡張により利用できます. この言語拡張で利用できる記法のひとつにバナナ括弧 (| ⋅ |) があります. §9.28 Arrow n

    Haskell の 3 つのバナナ - Qiita
    sh19910711
    sh19910711 2023/01/13
    2019 / "ASCII 表現だと (| ⋅ |) はあまりバナナに見えませんが,TeX でそれっぽくレンダリングしてあげると,バナナに見える"
  • 関数型プログラミングに何を期待しているのか。 - 言語ゲーム

    阿部さんに、何で僕が一人で関数関数言ってるのか全然分からないと言われたので、寝る前に書く。だけど今日中に纏めるのは無理なので下書き。 プログラミングというのは、パソコンに何をやって欲しいかを伝えるという役割と、自分が何をやりたいのか纏める役割と、両方あると思う。特に自分が何をやりたいのか纏めるというのは大切で、プログラムを書く事によって今まで何て自分は浅はかな事を考えていたのだろうと何度も気づかされた。 で、なぜプログラミングによって考え方が纏まるかというと、プログラミングには考えを纏めるための色んな仕組みが用意されているから。サブルーチンだったり構造体だったりオブジェクトだったり。そういうのを使って、色んなアイデア同士の関係をじっくり見たり、壊れていた部分を探したり、意外と共通していた物を見つけたり、プログラムとアイデアが同時に整理されてくる。これがプログラミングで一番大切な部分。 そこ

    関数型プログラミングに何を期待しているのか。 - 言語ゲーム
    sh19910711
    sh19910711 2022/10/05
    2007 / "プログラミング: パソコンに何をやって欲しいか + 何をやりたいのか / 部分と全体を同時に考える事は難しい > 部分を熱心に作っていると全体の構造を忘れてしまいがち / 意味の塊をコンピュータの力を借りて操作"
  • 代数的データ型と初等代数学

    「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには——問われたことがないのでわからないのだが——おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ

    代数的データ型と初等代数学
    sh19910711
    sh19910711 2022/07/10
    2018 / "Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型の存在は無視できない / int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ型"
  • はりぼて自作OCamlコンパイラAQamlでセルフホストしてみた

    おじさん1なにしたのはりぼて自作OCamlコンパイラを書いてセルフホストを達成しました2。コミットログによると、11月から開発を始めて3およそ2ヶ月くらいかかったようです。レポジトリはこちら4: https://github.com/ushitora-anqou/aqaml 文字列・リスト・タプル・レコード・バリアント・参照などの基的なデータ構造5と、 if・for・パターンマッチ・let・相互再帰関数・クロージャなどの基的な制御構造6が実装されています。 セルフホストに必要な機能のみを実装したので、もちろんOCamlの全てを実装したわけではありません。例えばGC7・カリー化8・クラスなどのOCamlの重要な機能が無い他、型推論9もありません。 GCが無いのでセルフコンパイルに数百MBのメモリを要しますが、まぁそれはそれです。 OCamlってなに一言では説明できないのでググってください

    はりぼて自作OCamlコンパイラAQamlでセルフホストしてみた
    sh19910711
    sh19910711 2022/01/30
    "MOOCのOCaml講座 / 今まで私が触れてきた言語とは異なるパラダイム・文法 / コースを半分ほど終えたところで勝手にコースアウトしてOCamlコンパイラをOCamlで書き始めました"
  • Haskell/Servantで行う安全かつ高速なAPI開発 - Speaker Deck

    Haskellを業務に導入し、ガッツリ使っている経験をもとに、技術スタックや開発スタイルを共有しつつ、Haskellのメリットや「何ができるのか?」を話します。 また、ライブラリの充実度も共有します。 お問い合わせはこちらのtwitterアカウントへ: @nakaji_dayo

    Haskell/Servantで行う安全かつ高速なAPI開発 - Speaker Deck
    sh19910711
    sh19910711 2021/11/13
    "Haskell Relational Record: 型安全で合成可能なクエリジェネレータ + DBのスキーマからコンパイル時に型を生成 + コンパイルが通れば正しいSQL + 問合せ結果も型にマッピング"
  • 圏論をデータベースに応用する(2) - bitterharvest’s diary

    5.4 セッターとゲッターの関手を一般化する 前回の記事の中で、説明の中心となっていた\(Store \ a \)という関手は、代数的データ型を用いて、 data Store a s = (a, a -> s) で定義した。しかしこれはデータベースでのセッターとゲッターを分かりやすくするための便宜的な方法である。すなわち、これらの操作でデータ型が変化しないように、 get :: s -> a set :: s -> a -> s としたためである。 しかし、セッターでは、フィールドに書き込むデータが、今までに書き込まれていたデータ型とは異なる可能性もある。その結果、レコードのデータ型も影響を受けるので、セッターとゲッターの型シグネチャは、一般的には get :: s -> a set :: s -> b -> t となる。これに対応させて、代数的データ型を定義すると、 data IStor

    圏論をデータベースに応用する(2) - bitterharvest’s diary
    sh19910711
    sh19910711 2021/11/06
    "データベースと圏論の関係については、David I. Spivakがその著書"Category Theory for the Sciences"のなかでも、別の観点から説明している"
  • 絶対に理解出来ないモナドチュートリアル - konn-san.com

    世の中には、恐しい数のモナドチュートリアルがあって、それぞれモナドは象だとか、いや接ぎ木だ とか、プログラマブル・コンテナだとか、プログラム可能なセミコロンだとか、色々な説明がなされている。「モナド チュートリアル」で検索すれば、他にも色々に絵解きされた有象無象のモナドが大量に引っ掛かる。そうそう、モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?なんてのもあったな。 この記事の目的は別に、こうした既存のモナドチュートリアルを「間違ってる!」とか「わかるわけねーよ!」といって貶そうという訳ではない。実際、既に幾多書かれているチュートリアルの中でも、僕の云いたいことと殆んど同じようなことが書かれているものは沢山ある。 では、上の膨大なリストの末尾にまた一つ「わかりやすい比喩」を付け足そうというのか?というとそういう訳でもない。そうそう、モナドは比喩ではないというチュートリアル

    sh19910711
    sh19910711 2021/06/12
    "「モナドとはモナドである」という説明をいつしか自然と受け容れて使う。それが、プログラミングにおいて「モナドを理解する」ということだろう / 圏論は、数学の様々な抽象化の方法が詰まった道具箱"
  • 君もelixirを始めてみないか | dev.wan.co

    エディターのサポートは、vim(vim elixir-lang/vim-elixir)と emacs(elixir-lang/emacs-elixir)とAtom(lucasmazza/language-elixir)があるから大丈夫かな?(他にもgeditTextmateも用意されているよ) 始めて見るにはまずelixirをインストールしないとね。 もしMacを使っていて、すでにbrewを使っているのであればとても簡単 $ brew update $ brew install elixir Ubuntu を使っているなら、リポジトリを追加してapg-getで入る $ wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all

    sh19910711
    sh19910711 2021/06/06
    "Erlangは1986年にJoe Armstrong, Robert Virding, Mike Williams の3人によって最初のバージョンが作られた / 通信機器メーカーEricsson内部の独自言語 / Reiaの後継のプロジェクトに指名され2014年9月18日にv1.0.0がリリースされたのがelixir"
  • 関数型プログラミングから予測可能プログラミングへ :: Igreque -> Info

    関数型プログラミングから予測可能プログラミングへ by Yuji Yamamoto on July 25, 2015 なんだか興に乗ってきたので、私もポエムめいたものを書いてみようと思います♪ このシリーズの目次はこちら 要約: ポエムなんてうんざりな人へ 「Haskellが関数型プログラミングの王道だよ」という理解は、誤解のもと。 今後このシリーズで言う「関数型プログラミング」とは、 「純粋な関数」を主に使用して行うプログラミングのこと。 Haskellの当によいところは 「プログラムの振る舞いを、コードを実行せず、読んだだけで予測できるようにする」という点。 動機: なぜ書くのか ここでは、私がHaskellをなぜ好むのか、 いわゆる「関数型プログラミング」との関係に触れつつ説明することで、考えを少しずつまとめたい。 一つの記事には収まらないので、複数の記事に分けてシリーズとする。

  • Call-by-needを採用した言語のインタプリタの実装 - fetburner.core

    この記事は言語実装 Advent Calendar 2016の9日目ために書かれました。 最近僕はcall-by-needに関連する研究をしており、気分を理解するためにcall-by-needを採用した言語のインタプリタをStandard MLで実装したりしました。今回はその時の事でも記事にしておきましょう。 Call-by-needとは? Call-by-needとは、評価戦略の一種です。評価戦略と言えばcall-by-valueとcall-by-nameが有名でしょう。 Call-by-valueは最も右側のredexから簡約する評価戦略で、例えば(λx. x x) ((λx. x) (λx. x))は (λx. x x) ((λx. x) (λx. x)) → (λx. x x) (λx. x) → (λx. x) (λx. x) → λx. x と簡約されます。ちなみにλの中は簡約

    sh19910711
    sh19910711 2020/12/12
    “評価戦略としてcall-by-needを採用した言語として有名なのがHaskellであり、このときの一度評価した値を覚えておく領域がよく耳にするthunk”