並び順

ブックマーク数

期間指定

  • から
  • まで

121 - 160 件 / 1558件

新着順 人気順

haskellの検索結果121 - 160 件 / 1558件

  • プログラミング教育ビジネスの闇|胡散臭いプログラミングスクール

    煽るプログラミングスクール 現状の働き方に不満を持ち、わらにもすがる思いでエンジニアやフリーランスを目指し、高いお金を払ってプログラミングスクールに通い、途中で挫折し、IT業界の悲惨さを知り、再びドロップアウトする。 そんな人たちを見ているといたたまれなくなる。 最近のプログラミングスクールは、「3ヶ月でフリーランスになれる」だとか「時給4000円」「誰でもできる」「転職成功率98%」「未経験でも月40万円以上」「自宅で仕事ができる」などと誇大で美味い話を言って、未経験者に甘い夢や希望を抱かせて入会や受講を煽ったり、IT業界への転職を扇動したりしているが、果たしてそれが本当に彼らのためになるのか、業界や社会のためになるのか、甚だ疑問に思う。 目次 胡散臭いプログラミングスクール界隈 狙われるプログラミング業界 人手不足という甘い誘惑 プログラマ定年説の真意 フリーランスの蔓延と価格競争 お

    • 『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog

      この記事は以下のページに移転しました. blog.ryota-ka.me 前編はこちら ryota-ka.hatenablog.com §8 発話文脈・変項割当 という文を発話したとする.この文は,代名詞 と の2つの指示対象が発話の状況から明らかなときにのみ適切である.このように,文脈に依存して意味が初めて定まる言語表現を直示 (deixis) という.指示対象を明らかにするため,次のように代名詞に指標 (index) を振ることにする. と に と という異なる指標が割り当てられているのは,それらが相異なる外延をもつことを表している. 既に述べたように,この文の外延は および の指示対象が文脈から定まることで初めて計算することができる.このような文は自由変項*1を含んだ開いた項 (open term) として見做すことができる.このような発話に際しての状況を utterance con

        『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog
      • 執筆中:「Haskellでの型レベルプログラミング」 | 雑記帳

        最近、「Haskellでの型レベルプログラミング」という「本」を執筆している。まだ完成ではないが、以下のリンクから読める: Haskellでの型レベルプログラミング なぜHaskellか 最近いろんな言語が出てきている中で、Haskellの強みとは何だろうか。人によって答えは色々あるだろうが、筆者にとってHaskellの魅力的な側面は強力な型システムである。どのくらい強力かというと、型レベルでプログラミングができ、依存型の模倣さえもできてしまう。 (依存型をやりたいなら最初から依存型のある言語を使えという意見は尤もだが、それはそれとして。) Haskellでの型レベルプログラミングの解説記事というのは、英語圏ではちらほら見かけるが、日本語圏ではあまり見ない。2018年(原文は2017年)に公開された Haskellにおける型レベルプログラミングの基本(翻訳) – Qiita が数少ない例で

        • 25年前の未来の言語の話 - Qiita

          私ごとですが、12月の9日に50歳になりました。そこでというわけでもないのですが、25年くらい前のプログラミング言語の技術について書きたいと思います。お話は大学院で学んだ動的型付けの並列オブジェクト指向の実装に偏っています。 背景 時は1990年代前半、今と同じようにCPUの性能は頭打ちになり解決策は並列化しかないということで盛んに並列処理の研究がされていました。もっとも、その後CPUは1000倍以上速くなっているのですが。 1981年にBYTE誌でSmalltalk-80を衝撃的に紹介されたのをきっかけにオブジェクト指向が注目されC++によって実用レベルで使われだしてきました。それとは別にSmalltalkのごく初期の実装(-72)にインスパイアされた、オブジェクト指向によく似た並列な計算モデルとしてアクターモデルというものが1973年に提唱されていてアクターモデルを応用した並列処理言語

            25年前の未来の言語の話 - Qiita
          • Lensだけで作るニューラルネットワーク

            これは、FOLIO Advent calendar 2021 の15日目の記事です。 圏論を機械学習に応用する話題の一つとしてLensで微分可能プログラミングを実装する話を紹介したいと思います。とはいえ圏論など気にせずLensを使ったニューラルネットワークを実装していきます。学習モデル、誤差関数、学習係数などの基本的な構成要素が全てLens(ParaLens)として実装できる様子を楽しんでいただければと思っています。 Lensって何? Lensはいわゆる getter と setter を組み合わせたデータ構造です。すなわち型sのデータ型から型aの値を取り出すgetter s -> a と、型sのデータ型を型aの値で更新して新しい型sのデータ型を作成するsetter (s, a) -> s から成っています。

              Lensだけで作るニューラルネットワーク
            • 関数型言語で DDD - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# - Shin x Blog

              オブジェクト指向言語でドメインモデルを実装することが当然のように行われていますが、Go で開発したり、Haskell で遊んだりしている中で、他のパラダイムの言語で実装するのはどうなんだろうかという想いがありました。 そんな時に出会ったのが、Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# という本です。 概要 構成 ドメインを理解し、モデリングする 端的なフレーズ Database-Drive-Design や Class-Driven-Design との違い 型、型、型 関数型言語による実用例 恐怖のモナド さいごに 参考 概要 本書は、とある会社の受注とその関連業務をドメインとし、モデリングして、実装していくという内容です。紙ベースで行われている業務

                関数型言語で DDD - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# - Shin x Blog
              • 高階関数は何であるかを簡潔に説明する - Qiita

                はじめに なんか、高階関数で、一部界隈が盛り上がっているぽいので、なんとなくエントリを書いてみました。一言で言うと、「関数を引数に取る関数」あるいは「関数を返り値とする関数」が、高階関数と呼ばれます。それだけです。 あとは、各言語で、引数や返り値になれるような「値としての関数=第一級関数」をどのように実現するかが問題になります。ここで、「関数を引数に取る」というのは、「値としての関数」を引数に取る、という意味であることに注意してください。 というわけで、以降、いくつかの言語で、第一級関数をどのようにして表現しているかについて述べてみたいと思います。他にも方式があると思いますが、ツッコミ歓迎。 いわゆる「関数型プログラミング言語」の場合 多くの「関数型プログラミング言語」では、「関数」それ自身がプリミティブでかつ値なので言うまでもないのですが、いくつか例を挙げます。 たとえば、Schemeで

                  高階関数は何であるかを簡潔に説明する - Qiita
                • Haskellで動的計画法を攻略する

                  Haskellで動的計画法を実装する2つの方法 出典: Easily Solving Dynamic Programming Problems in Haskell by Memoization of Hylomorphisms ザ圏論的やり方としては①Dynamorphism、手続き的な方法として②STモナドが挙げられる。 DynamorphismはHylomorphismをメモ化したようなもので、詳しくはlotz氏のサイトを参照してほしい。 Haskellerとしては、Dynamorphismはとても憧れる手法である。しかし、思ったよりも速度が出ない。。 このスクラップに二通りのLCSの解法を記載したが、いずれもTLEであった。 lotz氏によると、メモ化されたデータ構造にはO(n)でしかアクセスできないことが理由とのこと。 この記事では、STモナドによるメモ化再帰を用いた動的計画問題

                    Haskellで動的計画法を攻略する
                  • Windowsで動くプログラミング言語に脆弱性、引数の扱い方の穴を突いて攻撃

                    CERT Coordination Center (CERT/CC, Carnegie Mellon University)は4月10日(米国時間)、「VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows」において、Windows上で動作する複数のプログラミング言語から引数を適切にエスケープしない脆弱性を発見したと報じた。この脆弱性はアプリケーションのコマンドインジェクションにつながるとして注意を呼びかけている。 VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows 脆弱性の詳細 多くのプログラミング言語にはオ

                      Windowsで動くプログラミング言語に脆弱性、引数の扱い方の穴を突いて攻撃
                    • Functional programming is finally going mainstream

                      Paul Louth had a great development team at Meddbase, the healthcare software company he founded in 2005. But as the company grew, so did their bug count. That’s expected, up to a point. More code and more features mean more defects. But the defect rate was growing faster than Louth expected. “We were seeing more and more of the same types of bugs,” Louth says. “It was clear that there was an issue

                        Functional programming is finally going mainstream
                      • Algebraic Effects for the Rest of Us

                        Have you heard about algebraic effects? My first attempts to figure out what they are or why I should care about them were unsuccessful. I found a few pdfs but they only confused me more. (There’s something about academic pdfs that makes me sleepy.) But my colleague Sebastian kept referring to them as a mental model for some things we do inside of React. (Sebastian works on the React team and came

                        • Scalaプログラマが圏論を学ぶためのオススメ文献 - 3選 - Qiita

                          圏論は数学の一分野です。これを学ぶのには「数学書」を手に取るのが王道なのですが、残念ながらこれは大部分のプログラマに理解できる言葉では書かれていません。「定義・命題・証明」の積み重ねで書かれています1。ここで大半のScalaプログラマは苦い顔をすると思います。もう少し分かりやすいScalaプログラマ向けの圏論入門がないかと探してみると「Haskell」向けの記事が大量に引っかかるでしょう。ここで多くのScalaプログラマは心を折られてしまいます。「圏論」はまだScalaプログラマには早すぎたんだと・・・ 本記事ではそんなあなたに贈る3つの文献をご紹介したいと思います。 (本記事は自分のブログからの転載記事です。) はじめに 本記事は圏論に興味があるScalaプログラマを対象にしています。特にプログラマにとって実用的な圏論の知識をScalaを通して身につけたい方にオススメします。 プログラマ

                            Scalaプログラマが圏論を学ぶためのオススメ文献 - 3選 - Qiita
                          • 君の手で作るモナドは怖くない - builderscon tokyo 2019

                            Abstract 本セッションの目的は、ずばり モナド (monad) に対する 初心者の心理的障壁を取り除くこと です。モナドはプログラミング言語 Haskell と関連して言及されることが多く、世間では何か得体のしれない難解な概念だというイメージが先行しています。しかし、実際にはどのプログラミング言語にもある「処理」の概念を一般化しただけで、プログラマにとっては顔見知りの相手に過ぎません。 本セッションでは、実際の使用場面から逆算してモナドを再発明することでその必然性を体感し、必要以上に強調された神秘性を引きはがすことを目標とします。受講後には、セッション内で扱わなかった Haskell の基本文法を少し補うことで、モナドを利用した単純なプログラムならすぐに書けるようになるでしょう。 そもそも、なぜモナドや、それを用いる Haskell にはこんなにも怖ろしげなイメージが先行しているの

                            • NeoHaskell

                              NeoHaskell is a dialect of Haskell that is focused on newcomer-friendliness and productivity. It is designed to be easy to learn and use, while also being powerful enough to release your app with minimum effort and maximum confidence.

                                NeoHaskell
                              • ユースケース層が投げうるエラーの型を「量化した open union」にしておけば複数のユースケースを合成したときに上の層でエラーハンドリングが楽にできて最高です! - ryota-ka's blog

                                この記事は以下のページに移転しました. blog.ryota-ka.me この記事は Haskell Advent Calendar 2020 20日目の記事です. TL; DR タイトル 問題設定 ユースケース層とサーバ層が存在する Web アプリケーションを考える.サーバ層はユースケース層を呼び出すことができるが,ユースケース層はサーバ層について無知でなければならない. +----------------+ | server layer | +-------+--------+ | depends on +-------v--------+ | use case layer | +----------------+ このようなアプリケーションのAPI リクエストハンドラにおいて,複数のユースケースを合成して呼び出すケースを例に挙げ,それぞれのユースケースが投げうるエラーをうまく扱う o

                                  ユースケース層が投げうるエラーの型を「量化した open union」にしておけば複数のユースケースを合成したときに上の層でエラーハンドリングが楽にできて最高です! - ryota-ka's blog
                                • Why Dark didn't choose Rust

                                  Welcome again HN! Dark is a programming language, structured editor, and infrastructure—all in one—whose goal is to make it 100x easier to build backend services. Check out the website, our What is Dark post, and How Dark deploys in 50ms for more. Thanks for checking us out! This is the third or a 3-part series: Leaving OCaml and Dark's new backend will be in F#. You can enjoy this without reading

                                    Why Dark didn't choose Rust
                                  • Haskellプロジェクトのベストプラクティス

                                    Haskellプロジェクトの「良い習慣」と考えられるやつをまとめてみます。あくまで私の個人的な意見です。 プロジェクト固有のPrelude Prelude に相当するモジュールをプロジェクト独自に持っておくと便利ではないか、という話をします。代替Preludeの話ではありません。 プロジェクト固有のPreludeがあると便利な理由 理由の一つは、標準 Prelude の変化です。直近では次のような変化がありました: GHC 9.4: ~ 型演算子が追加(これまでは構文だった) GHC 9.6: liftA2 が追加 GHC 9.10(見込み): foldl' が追加 もっと昔に遡ると、Semigroup((<>)) が増えるやつなどがありました。 この帰結として、 新しいGHCで名前の衝突が起きやすくなる 新しいGHCで「冗長なインポート」の警告が出やすくなる ことが言えます。これらの問題

                                      Haskellプロジェクトのベストプラクティス
                                    • Interesting Programming Languages

                                      An opinionated collection of programming languages. This is a list of what I consider interesting. Requests to add to this list are welcome, but there is no guarantee I’ll include them. As you can see many mainstream programming languages are misssing from this list. Alore is a language that explores optional typing in a Python-like programming language.Alpaca is a statically typed, strict/eagerly

                                      • WebAssembly backend merged into GHC

                                        Tweag has been working on a GHC WebAssembly backend for some time. Recently, the WebAssembly backend merge request has landed in GHC, and is on course to appear in the upcoming 9.6 release series. This post will give a quick demonstration of how to try it out locally, and explain what comes in this patch and what will be coming next. Playing with WASM locally If you’re using nix on x86_64-linux, c

                                          WebAssembly backend merged into GHC
                                        • Algorithm Design with Haskellでアルゴリズムを学ぶ - 朝日ネット 技術者ブログ

                                          はじめに 開発部のcbmkageです。 仕事でプログラムを書いていると、どうしたら期待通りに、かつ高速に動作するアルゴリズムが実装できるか、考えることがあります。 本記事では、アルゴリズムについて新たな視点を与えてくれる本「Algorithm Design with Haskell」を紹介します。 本記事はHaskell中級者向けです。Haskellの文法や、代表的なリスト操作関数を知っていることを前提としています。 はじめに Algorithm Design with Haskellとは 準備: 関数の同値関係 貪欲アルゴリズムのPART紹介 貪欲アルゴリズムとは 候補の生成と選択 貪欲アルゴリズムへの改善 まとめ 採用情報 Algorithm Design with Haskellとは Algorithm Design with Haskell 作者:Bird, Richard,Gib

                                            Algorithm Design with Haskellでアルゴリズムを学ぶ - 朝日ネット 技術者ブログ
                                          • 関数型プログラミングを学んで見解を示す for javascript - Qiita

                                            関数型プログラミングを silver の bullet としてなりふり構わず振り回していましたが、 ちょっと真面目に学ぶ機会を設けてみました。 関数型プログラミング(Functional Programming)を学んだ参考書の紹介と 私の浅い見解についてまとめていきます。 参考書のご紹介 Functional-Light-JS 筆者曰く、筆者の数学的知識は一般レベル、Scheme/Clojure/Haskell は未経験。 そのため関数型本来の意味や各用語の学術的な意味合い等は記載しておらず、 実用的なアプローチと共にお送りする文書とのこと。 いわゆるボトムアップ。 functional-programming-jargon こちらは打って変わって関数型に関する jargon についてまとめています。 1 番ありきでこちらを付加資料として読むと見識が深まるかと思います。 いわゆるトップダ

                                              関数型プログラミングを学んで見解を示す for javascript - Qiita
                                            • GHCのIOマネージャの歴史と僕の苦悩 - あどけない話

                                              これは、Haskell Advent Calendar 2021 の8日目の記事です。 Haskellのコンパイラとして事実上一択となったGHCには、「軽量スレッド」が実装されています。軽量スレッドは、ネイティブスレッドよりも軽量なスレッドで、他の言語では「グリーンスレッド」とも呼ばれています。Haskellerが並行プログラミングをするときは、軽量スレッドを息を吸うかのように使います。 複数の軽量スレッドの入出力を束ねるのが、IOマネージャです。IOマネージャも単なる軽量スレッドであり、OSから入出力のイベントを受け取り、それぞれの軽量スレッドにイベントを通知します。 軽量スレッド(っぽい)機能を提供する他の言語では、GHCのIOマネージャを参考にしているようです。僕はIOマネージャの開発に深く関わっています。この記事ではIOマネージャの歴史をまとめるとともに、主にmacOSでの実装に関

                                                GHCのIOマネージャの歴史と僕の苦悩 - あどけない話
                                              • UoPeopleでComparative Programming Languages(プログラミング言語比較論)を修了した - えんぴつぶろぐ

                                                オンライン大学 University of the People でComparative Programming Languages (CS4402) を修了したのでその感想を書きます。 これまでのUoPeople関連の記事はこちら: UoPeople カテゴリーの記事一覧 - えんぴつぶろぐ はじめに プログラミング言語のパラダイムの変化を追いながら、命令型言語と非命令言語(関数型や論理型など)の特徴を学び比較を行うコースです。 各言語の歴史や特徴だけでなく、コンピューターシステムのアーキテクチャやコンパイルの仕組みなども触れるので、今までのCS系コースの総復習的な内容だと感じました。 #UoPeople プログラミング言語比較論(#CS2204)の感想。 言語の比較だけじゃなく今までのCS系コースの総復習的な内容だった。 ノイマンアーキテクチャ、チューリングチャーチ理論から始まるプロ

                                                  UoPeopleでComparative Programming Languages(プログラミング言語比較論)を修了した - えんぴつぶろぐ
                                                • 遅延評価でデバッグが困難になる状況

                                                  先日、Haskell 界隈で遅延評価によってデバッグがし辛いのはどんな時かと言う話があった。見た感じ、遅延評価によってデバッグのしにくさはそんなに変わらないと言う意見が結構あり、個人的には衝撃だった。僕自身は遅延評価にだいぶヘイトを溜めてる人なので、どういう状況でデフォルト遅延評価が嫌かを実感できる問題を作った。この問題を解けば、きっとヘイトを共有できるはずってわけ。一緒に地獄に落ちような。 なお、かなり主観に寄っていて、結構書き殴ってる部分が多いので、厳密な議論をするにはあまり良い例ではないかもしれない。個人的には、備忘録的な意味合いも強くて、今まで詰まったやつをまとめておくかみたいな感じでもある。 先に結論を書いておくと、 プログラム自体が大きくて [1] 複雑な制御構造をしていて (optional) 以下のいずれかの条件を満たす 遅延評価を機能として使っている デバッグ対象が効率に

                                                    遅延評価でデバッグが困難になる状況
                                                  • GitHub - IBM/fp-go: functional programming library for golang

                                                    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                      GitHub - IBM/fp-go: functional programming library for golang
                                                    • グラフからコミュニティ構造を抽出する 〜リッチフローによるグラフの時間発展〜

                                                      コミュニティ抽出とは簡単に言えばグラフにおけるノードのクラスタリング手法です。具体的なアルゴリズムとしてはGirvan–Newman法をはじめ様々なアルゴリズムが存在しますが、この記事では去年(2019年)提案された新しい手法について解説したいと思います[1]。 [1907.03993] Community Detection on Networks with Ricci Flow 話の元になっているのはこちらの論文で、グラフをリッチフローによって変形し、伸びたエッジを切断していくことでクラスタを求めるというアルゴリズムです。リッチフローという聞き慣れない言葉が出てきましたが、ちゃんと後で説明するので気にせず進めましょう。 まずは実際にグラフのクラスタリングを行う様子をアニメーションで見てみてください。 アルゴリズム自体はそれほど難しくありませんが、背景を含めて理解するためには2つの理論

                                                        グラフからコミュニティ構造を抽出する 〜リッチフローによるグラフの時間発展〜
                                                      • GHCのバックエンドについて | 雑記帳

                                                        先日リリースされたGHC 9.2.1で、64ビットArm(AArch64)向けのネイティブコード生成器(Native Code Generator; NCG)が実装された。これを機会にGHCのバックエンドについて簡単にまとめてみる。 概略 GHCでHaskellプログラムをコンパイルすると、いくつかの中間言語を経て最終的には機械語が出力される。 この工程の最後の部分を「バックエンド」と呼ぶ。 GHCには Native Code Generator (-fasm)LLVM backend (-fllvm)unregisterised via-C backend の3種類のバックエンドが存在する。このほか、バイトコードインタープリターと-fno-codeもデータ型的にはバックエンドの一種として扱われている。(参照:compiler/GHC/Driver/Backend.hs) Native C

                                                        • Beating C with 80 lines of Haskell: wc

                                                          Despite the click-bait title I hope you'll find this post generally illuminating, or at the very least a bit of fun! This article makes no claims that Haskell is "better" than C, nor does it make claims about the respective value of either language, or either implementation. It's simply an exploration into high-performance Haskell, with a few fun tricks and hacks along the way. You can find source

                                                            Beating C with 80 lines of Haskell: wc
                                                          • GitHub - HigherOrderCO/HVM: A massively parallel, optimal functional runtime in Rust

                                                            Higher-order Virtual Machine (HVM) is a pure functional runtime that is lazy, non-garbage-collected and massively parallel. It is also beta-optimal, meaning that, for higher-order computations, it can, in some cases, be exponentially (in the asymptotical sense) faster than alternatives, including Haskell's GHC. That is possible due to a new model of computation, the Interaction Net, which supersed

                                                              GitHub - HigherOrderCO/HVM: A massively parallel, optimal functional runtime in Rust
                                                            • 数式からいい感じに図表が生成できてしまう! Penroseを試す (SIGGRAPH 2020) - Qiita

                                                              Penroseとはなにか Penroseは、数式に近い数学的表現から、細かなパラメータの指定なく、いい感じに図表を生成してくれる、カーネギーメロン大発、SIGGRAPH 2020に採択されたプロジェクトです。以下に、論文より、自動生成された図表を抜粋します。 数式にとどまらず、コンピュータグラフィックスのメッシュ図示など、幅広い表現に使えます。 Penroseは、数式に近い数学的表現から、細かなパラメータの指定なく、いい感じに図表を生成してくれる、カーネギーメロン大発、SIGGRAPH 2020に採択されたプロジェクトです。 数式にとどまらず、コンピュータグラフィックスのメッシュ図示などにも使えます。 まずは筆頭著者のKatherine Ye氏のTweetにつけられた動画をご覧ください。 今日現在(2020.6.7)、紹介動画のPenrose Web IDEは未公開 (今後公開予定とのこと

                                                                数式からいい感じに図表が生成できてしまう! Penroseを試す (SIGGRAPH 2020) - Qiita
                                                              • 新しいHaskellベースのWeb App Specification Languageがアルファ版でリリースされた

                                                                Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

                                                                  新しいHaskellベースのWeb App Specification Languageがアルファ版でリリースされた
                                                                • カタンの最長交易路(Longest Road)を探すために半環を考える - Qiita

                                                                  この記事はlotzさんの「動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜」という記事を読んで、自分の問題に対しても応用できないかと考えた結果をまとめたものです。 先に元の記事を読んでから以下の内容を読んで頂けるとスムーズかと思われます。 最長交易路とは 皆様は『カタン』というゲームをご存知でしょうか? カタンは複数のプレイヤーが無人島を開拓して、最も繁栄させることができたプレイヤーが勝利するというボードゲームです。 このゲームには「最長交易路」というルールがあり、最も長い交易路を作ったプレイヤーに追加の得点が入ることになっています。 このゲームにおける交易路はグラフ理論の言葉を借りると無向多重グラフとみなすことができます。 そして、最長交易路を探すということは、無向多重グラフの中で最長の小道(trail)を探すことになります。 ここでは、ある頂点からある頂点へ行くル

                                                                    カタンの最長交易路(Longest Road)を探すために半環を考える - Qiita
                                                                  • HaskellでのTDDを楽しくするライブラリ methodを作りました。

                                                                    はじめに Haskellでテスト駆動開発を行う際、純粋な関数は単体テストを書きやすいですが、 返り値がモナドの関数(この記事ではそのような関数をメソッドと呼びます)にたいして単体テストを書くのは簡単ではありません。 今回、メソッドに対して単体テストを書きやすくなるライブラリ methodを作成しました。 methodとは methodでは a1 -> ... -> an -> m b型の関数のことをメソッドと呼びます。 ここでmはモナドです。(->) rモナドを除く大抵のモナドはサポートしていますが、独自のモナドをメソッドにするにはMethod型クラスを実装する必要があります。 モックの作成 methodでは任意のメソッドのモックをDSLで書くことができます。 import Test.Method import RIO (throwString) f,f' :: Int -> String

                                                                      HaskellでのTDDを楽しくするライブラリ methodを作りました。
                                                                    • 四元数ニューラルネットワークとGHR微積分

                                                                      これは「FOLIO Advent Calendar 2023」6日目の記事です。 ニューラルネットワークで取り扱う数値を実数とは異なる数に拡張することは、機械学習や計算科学の発展における魅力的な課題の一つです。実数を用いた数値表現は多くのタスクにおいて十分な結果をもたらしてきましたが、新たな数値体系を導入することで、今までとは異なる問題が解決できるようになったり実数では見られなかった新たな現象が起こる可能性に期待することができるでしょう。例えば数値が取れる値を±1に制限したBinalized Neural Networksはハードウェアとの相性が良くメモリ効率の良い実装が可能であったり、拡大実数\bar{\mathbb R}={\mathbb R}\cup\{-\infty,\infty\}を用いた5層のReLUネットワークには任意の深さのReLUネットワークを埋め込むことができたりします

                                                                        四元数ニューラルネットワークとGHR微積分
                                                                      • RubyでDSLが書きやすい理由を整理する - Qiita

                                                                        これは何 Rubyは「DSLが書きやすい言語」という説明がされることがあります。 なぜRubyはDSLが書きやすい、と言われるのかを僕なりにまとめてみました。 「こういう要素もあるからだよ」などあればぜひコメントや編集リクエストをいただけると嬉しいです。 DSLの例 DSLとは直訳するとドメイン固有言語です。 簡単なイメージで言うと、「ユーザーが自由に構文に近い仕組みを実装、提供できる」ようなものです。 詳しい説明はWikipediaにお任せします。 RubyやRailsで使われているDSLで有名なものはActiveRecord周りの実装などでしょうか。 例を記載します。

                                                                          RubyでDSLが書きやすい理由を整理する - Qiita
                                                                        • プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー

                                                                          原文(投稿日:2022/02/25)へのリンク Flixは多くのプログラミング言語にインスパイアされたオープンソースのプログラミング言語であり、開発者は関数型、命令型、論理型のスタイルでコードを書くことが可能である。FlixはScalaに似ており、Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している。JVM言語はポリモーフィックエフェクトシステムやDatalog制約などのユニークな機能をサポートしている。 FlixのプログラムはJVMバイトコードにコンパイルされ、開発者はFlix Visual Studio Code拡張機能を使用するか、online playgroundを使用して言語を評価することができる。 コミュニティはいくつかの原則に基づいて言語を開発している。例えば、NULL値を使わない、デフォルトでprivate、リフレクションを使

                                                                            プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー
                                                                          • Elmをプロダクトで一年書き続けた感想 - Runner in the High

                                                                            この記事はElm Advent Calendar 2019最終日の記事です。 去年末あたりから現職のチームでElmを書き始めたので、大体1年程度はプロダクションでElmのコードを書き続けたことになる。学生時代はRubyとJavaScriptばっかりだったので、関数型プログラミングとかそういうバックグラウンドは一切なかった。その観点から、改めて率直な感想を申し上げておく。 なお、弊社フロントエンドチームとElmに関するはなしは、私の書いたFringe81アドベントカレンダーの記事を参照のこと。 fringeneer.hatenablog.com Elmには中毒性がある Elmを触ったことのない方からすると「?」になるかもしれない(というか、昔の自分がそうだった)が、率直に言ってElmには中毒性がある。一度Elmを知ると、Elm以外の言語を触るたびに「これ、Elmだったら〇〇なのにな〜」と思う

                                                                              Elmをプロダクトで一年書き続けた感想 - Runner in the High
                                                                            • Haskell で、優先度付きキューを使ったダイクストラ法

                                                                              Haskellのカレンダー | Advent Calendar 2022 - Qiita に参加させていただきます! 突然ですが Haskell でダイクストラ法を実装します。 ダイクストラ法は重み付きグラフで最短経路問題を解くアルゴリズムのひとつです。ダイクストラ法 - Wikipedia に詳しい解説があります。 ダイクストラ法は、重み付きグラフにおいて、その重みに負の値がない・・・つまり重みが正であることを前提にしています。この構造上の仮定によって、貪欲的手法を取ることができるのがその特徴で、結果ベルマン・フォード法などの汎用的なアルゴリズムよりも計算量的に有利になります。 ダイクストラ法では、始点から各頂点への到達コストを最初に \infty と置いて、そこから緩和操作によって徐々にそれらを最適コストまで収束させていくわけですが、このとき グラフの頂点集合からその時点で最小のコスト

                                                                                Haskell で、優先度付きキューを使ったダイクストラ法
                                                                              • 技術書を自作PDFリーダーで読む - Haskellでつくる不思議な読書体験 (1):関数型玩具製作所

                                                                                技術書典で購入した本をちょっと不思議なPDFリーダーで読んでみませんか? Acrobat Readerや、Kindleとはひと味違った読書を可能とします。 【ビルド済みソフト(Windows)】 https://polymony.net/2020/12/19/post-3765/ 【動画など】 https://github.com/polymonyrks/poppyS/blob/master/READMEJP.md 自然言語にもシンタックスハイライト的な何か(着色)を試みるものです。 難しい文書、読む気すら起こらない文書を攻略できます(速読・精読)。 技術書典10に合わせてビルド済みソフトを用意できました。 ぜひ、ご自身で体験してみてください。 (本書を買わなくてもソフトは動かせます、本書には着色戦略が書かれています) 【扱う内容】 * 自然言語への着色による視認性向上の可能性 * 具体的

                                                                                  技術書を自作PDFリーダーで読む - Haskellでつくる不思議な読書体験 (1):関数型玩具製作所
                                                                                • STモナドはなぜ変更可能な参照を外へ持ち出せないのか調べてみた - shinharadの日記

                                                                                  この投稿は、Haskell Advent Calendar 2019 の4日目の記事です。STモナドの仕組みについて書きました。初中級者向けの内容となっています。 はじめに STモナドとは STモナドの型 STモナドの使用例 STモナドで使用されるデータ型と各種関数 Data.STRef newSTRef modifySTRef readSTRef runST 変更可能な参照を外へ持ち出そうとすると エラーメッセージから考察する forallの探求 量化子は型に量的な意味を持たせる 量化子を関数の内側で定義する ランクN多相の概要と特徴 ランクN多相の概要 特徴その1: 型推論の制限を緩和 特徴その2: スコープ内での型の束縛 forallの探求はここで終わり STモナドのトリック newSTRefの結果型の意味 runSTの引数の型の意味 おわりに 訂正内容(2019/12/06) 参考

                                                                                    STモナドはなぜ変更可能な参照を外へ持ち出せないのか調べてみた - shinharadの日記