並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 56件

新着順 人気順

代数的データ型の検索結果1 - 40 件 / 56件

  • 代数的データ型と初等代数学 - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,Rust や Swift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ

      代数的データ型と初等代数学 - ryota-ka's blog
    • TypeScriptで学ぶ代数的データ型

      代数的データ型とはなにか 代数的データ型とは、要素の個数の足し算と掛け算のアナロジーで語ることができる型のことを指すというふわっとしたコンセンサスがありますが、 厳密に「これが代数的データ型である」という定義はおそらくありません[1]。 また、代数的データ型はいわゆる関数型言語で実装されることが多い言語機能であり、 代数的データ型を重用するプログラミングスタイルは関数型の一派としてみなされる傾向がある[2]と思っています。 本記事では数学的な説明やアナロジーは用いず、なるべく具体的なコードを提示します。 そして、代数的データ型という言葉を「かつ」と「または」を表すことができる型として使います。 更に、「または」の型はコンパイラによって漏れなく徹底的にチェックされる必要があります。 詳細は後ほど説明します。 本記事の構成 まず、本記事における「代数的データ型」とはなにかを説明し、それをコード

        TypeScriptで学ぶ代数的データ型
      • ラムダ計算で代数的データ型を表現する方法 - @syamino はてなダイアリー

        ラムダ計算でEither Either型の値をパターンマッチする状況を考えます。 「データコンストラクタのパターンマッチ」は,下図のようにしてラムダ計算で表現できます。 ラムダ計算でBool 今度は,Bool型の値をパターンマッチする状況を考えます。 TrueやFalseには引数が無いので,(3)や(4)はλで囲みません。 パターンマッチ = 「データコンストラクタを他の関数に置き換えること」 パターンマッチによって,Leftがlに置き換わります。以下同様です。 「データコンストラクタを置き換える」という概念について,もう少し詳しく考えていきます。 データコンストラクタの置き換え方は2種類ある リストのような再帰的なデータ型では,データコンストラクタの置き換え方が2種類あります。 data List a = Cons a (List a) | Nil (1) 全てのデータコンストラクタを置

          ラムダ計算で代数的データ型を表現する方法 - @syamino はてなダイアリー
        • 代数的データ型について #w8lt

          AWSの各種サービス紹介と活用方法 − AI・ML活用デモを交えて − / 20231208aws-aiml-seminar

            代数的データ型について #w8lt
          • 代数的データ型と準同型写像 - プログラムモグモグ

            最近考えていることを述べます. 代数的構造と準同型写像に関する考察です. 特に必要な知識は無いつもりですが, Haskellのコードを読めると嬉しいです. import Prelude hiding 以下のものを隠しておいて下さい. import Prelude hiding ((+), (++), length, True, False, Bool) 自然数とリストの定義 まず, 自然数(非負整数)とリストの定義からスタートします. data Nat = Zero | Succ Nat deriving (Show, Eq) 自然数はこんな感じです. ペアノの公理ですね. ここでは, 表示できるようにShowクラスのインスタンスとして自動導出しています. 更に, 同値であるか調べられる, という意味で, Eqクラスの自動導出もしています. ここで注意していただきたいのは, 名前が重要では

              代数的データ型と準同型写像 - プログラムモグモグ
            • 代数的データ型 - Wikipedia

              代数的データ型(だいすうてきデータがた、英: algebraic data type)とはプログラミング、特に関数型プログラミングや型システムにおいて使われるデータ型である。それぞれの代数的データ型の値には、1個以上のコンストラクタがあり、各コンストラクタには0個以上の引数がある。 代数的データ型の値(データ)の感覚的な説明としては、引数で与えられた他のデータ型の値を、コンストラクタで包んだようなもの、である。コンストラクタに引数がある代数データ型は複合型(他のデータ型を組み合わせて形成する型)である。 概要[編集] Haskellにおける、葉に整数型の値を持つ(分岐は部分木しか持たない)、二分木の例で説明する。以下のようなdata宣言で、データ型を宣言する。 data Node = Leaf Integer | Branch Node Node deriving (Show) -- 表示

              • 代数的データ型をJavaで安全に使いこなす - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」

                基盤本部(開発部門)の木下です。前回、Java 17 の新機能を使ってドメイン駆動設計(Domain Driven Design: DDD)のモデリングの表現力を高める例をご紹介しました。 style.biglobe.co.jp 代数的データ型(Algebraic Data Types)を導入するのがポイントなのですが、馴染みのないメンバーも多かったので、実例を使って詳しく解説してみました。関数型プログラミング由来のとても便利な道具です。ぜひ活用してみてください。 代数的データ型とは 直積型 直和型 直和型の Java での実装 ベタに class で表現してみる 2つのクラスと interface で実現 安全に利用できるメソッドを提供する おわりに 代数的データ型とは 代数的データ型とは、基本となる型を組み合わせて作られる型のことです。 代数的データ型は直和型と直積型の2つからなります

                  代数的データ型をJavaで安全に使いこなす - BIGLOBE Style | BIGLOBEの「はたらく人」と「トガッた技術」
                • 代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog

                  これは、ドワンゴ Advent Calendar の 7日目です。 6日目は DartのASTを触ってみる でした。 さて、会社でアドベントカレンダーやる、と言われて、なんとなく参加登録したはいいものの、特に書くこと決めてませんでした。 最近、msgpackのScalaのライブラリ作ってるので、それ完成したらそのこと書こうかな―、と思ってましたが、msgpack-javaのバグや、古いversionと新しいversionの違いと戦ってたりしたら、なかなか完成しないので別のこと書くことにしました。 というわけで、標題の 「代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出」 という話をします。ドワンゴアドベントカレンダーだからといて、べつに変わったことはなく、いつものようなScalaネタです。 さてみなさん「代数的データ型」って知ってますか?Scalaよりもっと

                    代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog
                  • 代数的データ型とパターンマッチによる言語比較:Koka,Rust,Haxe,Swift,Elm,PureScript,Haskell,OCaml,ReasonML,ReScript,Kotlin,Scala,Dotty,Ruby,Julia,TypeScript - Qiita

                    代数的データ型とパターンマッチによる言語比較:Koka,Rust,Haxe,Swift,Elm,PureScript,Haskell,OCaml,ReasonML,ReScript,Kotlin,Scala,Dotty,Ruby,Julia,TypeScriptScalaKotlinHaxeRustSwift

                      代数的データ型とパターンマッチによる言語比較:Koka,Rust,Haxe,Swift,Elm,PureScript,Haskell,OCaml,ReasonML,ReScript,Kotlin,Scala,Dotty,Ruby,Julia,TypeScript - Qiita
                    • Haskell 代数的データ型 超入門 - Qiita

                      代数的データ型の基本的な使い方を説明します。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 ← この記事 Haskell アクション 超入門 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス 超入門 【予定】Haskell モナドとゆかいな仲間たち 【予定】Haskell Freeモナド 超入門 【予定】Haskell Operationalモナド 超入門 【予定】Haskell Effモナド

                        Haskell 代数的データ型 超入門 - Qiita
                      • Kotlin sealedタイプによる論理和型の実装: ポリモーフィズム形式と代数的データ型形式 - ドワンゴ教育サービス開発者ブログ

                        はじめに ポリモーフィズム形式の実装 ポリモーフィズム形式の実装の利点 ポリモーフィズム形式の実装の欠点 代数的データ型形式の実装 代数的データ型形式の実装の利点 代数的データ型形式の実装の欠点 まとめ We are hiring! はじめに Kotlinのsealedタイプ (sealed class と sealed interface) は、外部モジュールによるクラスの継承やインターフェースの実装 (以降は実装で統一します) を制限することで、継承先クラスの一覧を静的に取得できるようにする機能です。 以下は公式ドキュメントの例ですが、sealedタイプを使うことで log() 関数内の when が全てのとり得るパターンを網羅していることがコンパイル時にチェックされ、冗長な else を省くことができます。 また、Error インターフェースの直接の実装先が増えて when が網羅性

                          Kotlin sealedタイプによる論理和型の実装: ポリモーフィズム形式と代数的データ型形式 - ドワンゴ教育サービス開発者ブログ
                        • ポインタを使ったデータ構造をHaskellの代数的データ型と相互変換したい

                          struct ST_VEC3D_LIST { double x; double y; double z; struct ST_VEC3D_LIST * next; }; というような構造体を定義してやるのが常套手段です。 要素を追加するときは next ポインタでつないでいって、リストを手繰るときは next ポインタを再帰的に参照していくことになります。リストの終端は next に NULL を代入することで表現します。 さて、このようなデータをHaskellで扱いたくなったときのことを考えます。上記のようなデータを受け取ったり返したりするCの関数をFFIで呼びたくなったとか、そういうCの関数を QuickCheck でテストしたくなったとか。 とりあえずHaskellに用意されている Foreign.Ptr を使って、struct ST_VEC3D_LIST と同じ構造を定義してみまし

                          • Scala 代数的データ型 超入門 - Qiita

                            代数的データ型の基本的な使い方を説明します。 この記事はわりとScalaの基本的なところを前提としていると思います。 練習の解答例は別記事に掲載します。 以下の3つを合わせて代数的データ型と呼びます。 列挙型 直積型 直和型 これらを1つずつ見ていきます。 列挙型 種類を区別するための型です。他言語のenumに相当します。 Enumerationを利用して書くことも出来ますし、case classを利用して代数的データ型を表現することも出来ます。列挙型については、Enumerationを利用した方法で話を進めたいと思います。 Enumerationを使った例

                              Scala 代数的データ型 超入門 - Qiita
                            • GHC Generic Programming と代数的データ型 - khibino blog

                              Haskell Advent Calendar 2016 の 12日目のエントリーです。 代数的データ型と Functor Generic Programming は代数的データ型の構造を Functor の直積と直和のネスト構造に対応付けることで、 任意の代数的データ型に対する操作の記述を可能にする仕組みです。 まずは理解のために、より単純化した構造で考えてみましょう。 次のようなデータ型 ProdF f g a を考えると、 ProdF f g は Functor f および Functor g のもとで Functor になります。 これは、 もとの Functor のそれぞれの像の直積も Functor になる ということです。 ほぼ自明な内容ですが、 functor則を満たしていることを下に簡単に示してあります。 data ProdF f g a = ProdF (f a) (g

                                GHC Generic Programming と代数的データ型 - khibino blog
                              • 代数的データ型と初等代数学

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

                                  代数的データ型と初等代数学
                                • Python とマクロ、代数的データ型 - forest book

                                  前回はマクロの概要と Python でマクロを実装するための仕組みについて説明しました。 Python とマクロ、インポートフックと抽象構文木 - forest book 動作原理を理解した上で実際にマクロでどういったことができるのか、MacroPy というライブラリで提供されている機能をみながら考察してみます。 MacroPy の概要 Python でのマクロ実装の1つです。インポートフックでモジュール内のマクロ機能を AST 変換することで動作します。MacroPy で提供されているマクロ機能は以下のデコレーターを使って実装されています。 @macros.expr @macros.block @macros.decorator @macros.expose_unhygienic これらの仕組みを使って自分でマクロを実装することもできます。それにより Python の意味論 (seman

                                    Python とマクロ、代数的データ型 - forest book
                                  • Haskell の代数的データ型と型クラス、instance 宣言の関係

                                    1. クラスとメソッドが主役で、「関数」は脇役だと思っていた 関数型言語である Haskell で使用される用語には、Java, Ruby などのオブジェクト指向な言語で使われている用語と、類似しているものがある。しかし、似て非なるものがあるので、気をつけなくてはいけない。 (+_+) ところで、関数型言語に触る前は、 「関数」 というものを、一段低い存在として認識していた。 言語を学習した順序が C → Java → Ruby。途中で Smalltalk をちらっと横目で見た、という流れだったので、 「やっぱプログラムの中心はクラス、オブジェクトでしょ」 と思い込んでいた。 しかし、Ruby のブロック付きメソッドを見てから、 「ん?なんだこれ?」 と違和感と疑問を感じはじめ、 JavaScript の関数で 「関数もオブジェクトなの?」 と混乱し、そして Haskell で ファースト

                                      Haskell の代数的データ型と型クラス、instance 宣言の関係
                                    • 代数的データ型と直和型と直積型とTypeScript

                                      わかめ@毎日猫がいる @vvakame TypeScriptのunion typesと直和型と直積型と多相と小クワガタの区別をつけるための学習を始めよう。zakki 先生の教えに従う。 twitter.com/k_matsuzaki/st… 2014-11-25 23:04:27

                                        代数的データ型と直和型と直積型とTypeScript
                                      • 代数的データ型をラムダ計算の中で表現する方法

                                        このスライドはブログ記事として書き直しました。このスライドよりブログ記事の方がわかりやすいと思います。 http://d.hatena.ne.jp/syamino/20120524/p1

                                          代数的データ型をラムダ計算の中で表現する方法
                                        • 代数的データ型とF代数 - Qiita

                                          $\require{AMScd}$ はじめに Haskellを勉強していると諸々の概念と圏論の繋りが気になってきます。今回は代数的データ型について圏論との関係を述べます。 なお、面倒なので圏と関手、直積、直和はわかっているものとして話しを進めます。 自己関手$F : C \to C$について$F$代数とは$C$の対象$A$と$C$の射$a : F(A) \to A$の組$(A, a)$のことです。このとき$F$代数$(A, a)$と$(B, b)$の間の射とは$C$の射$f : A \to B$であり、以下の図を可換にするものである。

                                            代数的データ型とF代数 - Qiita
                                          • クラウド温泉3.0 (3) / 代数的データ型 on Scala

                                            クラウド温泉3.0@小樽のセッション「Monadicプログラミング・マニアックス」で使用するスライドのネタ検討その3です。 前回は代数的データ型について考えました。 ボクの非公式理解では、代数的データ型は: 直積の直和の総和です。 代数的データ型は以下のように、オブジェクト指向のインヘリタンスと対置する位置付けにある、関数型のかなり重要な構成要素であることが確認できました。 オブジェクト指向はクラスでインヘリタンス関数型は代数的データ型で選択この代数的データ型ですが、Scalaではケースクラスで実装するのがイディオムになっています。 ケースクラス以下のようにケースクラスPersonを定義します。これがそのまま代数的データ型となります。 scala> case class Person(name: String, age: Int) defined class Person代数的データ型は「

                                            • Haskell の代数的データ型を比較、特定の基準でソート – compare, sortBy

                                              Ruby であるクラスのオブジェクトを比較可能にするには、クラスに Comparable モジュールをインクルードする。Python なら __cmp__ メソッドをクラスに実装。 同じように Haskell でも代数的データ型を比較できるようにするには、Ord クラスのインスタンスにする。 比較できるように 代数的データ型の定義 例えば、「人」が「名前」「年齢」を持つことを代数的データ型で表現すると、 data Person = Person { name :: String , age :: Int } deriving Show Ord クラスのインスタンスにする Data.Ord によると、 Minimal complete definition: either compare or <=. Using compare can be more efficient for compl

                                              • 存在型を全称限量子と代数的データ型でエンコードする - maoeのブログ

                                                HaskellのGHC言語拡張に含まれる存在型は、existential quantifierを使わずにuniversal quantifierと代数的データ型を組み合わせて表現されます。以前からどうしてこんなことができるのかと思っていたのでそのカラクリを調べてみました。 GHC言語拡張では存在型を次のように定義できます。 {-# LANGUAGE ExistentialQuantifications #-} data Q = forall x. P x このように型引数を取らないデータ型のデータ構成子に、全称量化された変数を持つような型を定義します。この定義は直接existential quantifierを使えば次のように表現できるものです。 -- 疑似Haskell。GHCではコンパイルできない。EHCならできるかも。 data Q = P (exists x. x) データ構成子の

                                                • 代数的データ型 - ウォークスルー Haskell

                                                  代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです. 配列のような一部の例外を別とすれば,Haskell で取り扱うあらゆるデータ型は代数的データ型です.

                                                  • Haskell の read 関数で、文字列から代数的データ型へ変換 - 導出インスタンスを使って

                                                    1. 文字列から代数的データ型へ変換したい Haskell の print 関数で日本語を出力するために、以下のコードを参考にした。 どう書く?org 6616 nobsun: Item型を定義して、これをReadクラ...(設定ファイルから値を取得) 上記には、 「文字列から、代数的データ型へ変換するための、Read クラスの導出インスタンスの使い方」 についても、わかりやすく書かれていた。忘れないうちに、練習しておこう。o(^^)o 2. Show クラスの使い方はわかってきた ところで、Read の反対 Show クラスについては、少しわかるようになった。 フィールドに型変数を含んだ型の print 代数的データ型の値を print で出力には しかし、Read についてはチンプカンプンだった。 (+_+) 3. Read クラスについて 文字列を、特定の型へ変換する例を、最初に書い

                                                      Haskell の read 関数で、文字列から代数的データ型へ変換 - 導出インスタンスを使って
                                                    • 代数的データ型のデータのとりうる数を微分すると1穴空きデータ型の数になる話 - Qiita

                                                      この記事は,代数的データ型と代数の関係について調べたことを個人的な解釈でまとめたものです. (Qiita練習用の記事です.) データ型の要素数について 唐突ですが,あるデータ型の要素の数を数えたいと思います. たとえば,次のデータ型$A$があったとします. このデータ型は,1,2,3,4のいずれかしかとることができません. このデータ型$A$の要素の数は,要素がいち,に,さん,よん,と4つあります.データ型の要素を表す数字とは一切関係なく,要素の数を数えているだけです.このように,データ型は要素の数を数えることができます. いちいちデータ型に対するデータの要素の数を数えるのは面倒なので,データ型の要素の数を$N(A)$で表すことにします.この$A$の場合,$N(A)=4$ですね. 代数的データ型について 代数的データ型の正確な定義は私は知りません.ですが,ここではどんなものが代数的データ型

                                                        代数的データ型のデータのとりうる数を微分すると1穴空きデータ型の数になる話 - Qiita
                                                      • Haskellの「代数的」データ型は代数的か? - sumiiのブログ

                                                        という話(という言い方も合っているのかどうか定かではありませんが)。他力本願の本領を発揮して、別の話のついでに、知り合い(www.cl.cam.ac.uk/~amp12/)にちょっと聞いてみました。 The denotational semantics of datatypes, be it in a non-strict language like Haskell, or a strict one like ML, involves solutions of domain equations. It's just that the domain constructions are different in each case (to take account of the different evaluation strategies). The surprising thing is

                                                          Haskellの「代数的」データ型は代数的か? - sumiiのブログ
                                                        • scalaz.Treeとカタラン数。そして代数的データ型とzipperと微分 - xuwei-k's blog

                                                          1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900・・・ という数列を知ってますか?カタラン数と言うらしいです。 詳しくはwikipediaみるなり、ググるなりしてください https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%BF%E3%83%A9%E3%83%B3%E6%95%B0 https://en.wikipedia.org/wiki/Catalan_number Eugène Charles Catalanさんという人がいたらしいです。 https://en.wikipedia.org/wiki/Eug%C3%A8ne_Charles_Catalan さて、標題のscalaz.Treeとカタラン数との関係ですが、こういう話好きな人はすでに知ってるのかも

                                                            scalaz.Treeとカタラン数。そして代数的データ型とzipperと微分 - xuwei-k's blog
                                                          • 代数的データ型を使わないリスト - maoeのブログ

                                                            Haskellでは代数的データ型がよく使われています。取り扱いも簡単だしパターンマッチも便利。たとえばリストは次のように定義できます。 data List a = Nil | Cons a (List a) でも、実は代数的データ型を使わずにリストを表現することもできます。え?さっぱり浮かばない?ではこんな型を考えてみましょう。 {-# LANGUAGE Rank2Types #-} type List a = forall r. r -> (a -> r -> r) -> r nil :: List a nil x _ = x cons :: a -> List a -> List a cons x xs = \nil' cons' -> cons' x (xs nil' cons') はて、これはいったい…本当にこれはリストなのでしょうか?帰納的なデータ構造のお友達foldrを定義して

                                                              代数的データ型を使わないリスト - maoeのブログ
                                                            • 代数的データ型とパターンマッチの補遺: 赤黒木 | κeenのHappy Hacκing Blog

                                                              κeenです。 n月刊ラムダノートに書いた「代数的データ型とパターンマッチの基礎」のところで「パターンマッチがあるとこんなに便利になるよ」というのと紹介し忘れていたので勝手に補遺します。 まあ、紙面の都合もあって覚えていたとしても入りませんでしたね。 代数的データ型とパターンマッチの題材としては定番の赤黒木を紹介します。 赤黒木についてはこちらのページを参考にして下さい。特に、比較になるので掲載されているソースコードを読んで下さい。 Red-Black Tree by Java – これで分かった赤黒木 ソースコードはPython版もあるようです:Red-Black Tree by Python – Python による赤黒木。 読みましたか? それでは赤黒木をStandard MLで書いていきます。 パターンマッチ関係ないところでややこしくならないように保持するデータ型は int としま

                                                                代数的データ型とパターンマッチの補遺: 赤黒木 | κeenのHappy Hacκing Blog
                                                              • クラウド温泉3.0 (2) / 代数的データ型

                                                                クラウド温泉3.0@小樽のセッション「Monadicプログラミング・マニアックス」で使用するスライドのネタ検討その2です。 関数型プログラミングの基本構成要素の一つに代数的データ型があります。Wikipediaによる定義は以下です。 代数的データ型(Wikipedia)ボク自身は計算機科学や数学の素養がないので、Wikipediaの定義が厳密には何を指しているのか十分に理解ができているとはいえないのですが、ボクと同じ立ち位置にいる非計算機科学系のプログラマの方には、ボクがプログラミング時に使用している非公式な理解が不正確なものであっても有益ではないかと思います。 その前提で、以下でScalaでの代数的データ型について考えます。 非公式な理解ボクが代数的データ型を意識するときは、以下の定義を念頭に置いています。 直積の直和の総和直積は、「A×B×C」というように記述する複数の要素を組にしたも

                                                                • 代数的データ型と再帰的なデータ構造のこと - Qiita

                                                                  やっはろー。もう日付は過ぎていますけど、飛び入りで参加します。21日目と微妙にネタが被ってます! すみません! D言語の標準ライブラリの中でも影の薄い std.variant、の中でも影の薄い Algebraic は、その名の通り代数的データ型の役割を担っています。 import std.variant; void main() { struct Foo {} alias Bar = Algebraic!(int, string, Foo); auto bar = Bar(42); assert(bar.type == typeid(int)); assert(bar.get!int == 42); bar = Bar("answer"); assert(bar.type == typeid(string)); assert(bar.get!string == "answer"); bar

                                                                    代数的データ型と再帰的なデータ構造のこと - Qiita
                                                                  • チャーチ符号化の先へ:代数的データ型と多相ラムダ項のベーム=ベラルドゥッチ同型

                                                                    はじめに 基準線:代数的データ型に対する演算 符号化された代数的データ型に対する演算 符号化を始代数として見る 関数的ストリームで tail を取る方法 はじめに 1985年、コラド=ベーム (Corrado Böhm) とアレッサンドロ=ベラルドゥッチ (Alessandro Berarducci) が、狭義の正 (strictly positive) の代数的データ型を多相ラムダ計算 (System F) において符号化する方法を発表した。 彼らはデータ型に対する演算 ―― 構成 (construction) と特にパターンマッチ ―― を体系的に、あるいは自動的に、適用と抽象[関数適用とラムダ抽象にくわえて、全称量化型についての適用と抽象]のみを持つ対象言語へと翻訳する方法を示した。 彼らはこの符号化が一対一対応であることを証明した。 この方法を使えば、全ての狭義の正の代数的データ型

                                                                    • TeX での「代数的データ型」の扱い (1) - マクロツイーター

                                                                      または、「car/cdr と対応する cons を作る件について」。 もちろん、「car/cdr と対応する cons」の「仕様」は色々と考えられる。TeX で「リスト」を表す場合、通常は「Cons 対」を構成するのではなく、グループを並べた表現(「{one}{two}{three}...」の類)やデリミタを用いた表現(「one,two,three,...」の類)が用いられることを考えると、「(指定の表現形式の)リストの先頭と後続部」という扱いをするのが普通だろう。*1しかし今回は、敢えてリストを Cons で表して、「Cons に対応する car と cdr」を作ってみる。その理由は、この実装を「TeX における(似非)『代数的データ型』の扱い」という(少し変態的な)コーディングの事例としたいからである。 代数的データ型とは ……何だろうね。取り敢えず Wikipedia を参照。 代数

                                                                        TeX での「代数的データ型」の扱い (1) - マクロツイーター
                                                                      • HaxeのGADT (一般化代数的データ型) を使って言語処理系を実装する - Qiita

                                                                        二項演算 二項演算をGADTを使って定義する。enum BinOp<U,V,W>は二項演算 U × V → W を表す型。Plusは+, Timesは×, Andは∧, Orは∨, Eqは=, Ltは<を表す。 package mylang; enum BinOp<U,V,W> { Plus : BinOp<Int,Int,Int>; Times : BinOp<Int,Int,Int>; And : BinOp<Bool,Bool,Bool>; Or : BinOp<Bool,Bool,Bool>; Eq<X> : BinOp<X,X,Bool>; Lt : BinOp<Int,Int,Bool>; } ここから、Plusの型はBinOp<Int,Int,Int>だとか、Eq<X>の型はBinOp<X,X,Bool>だということが読み取れる。 二項演算の意味 二項演算子の意味を定義する。

                                                                          HaxeのGADT (一般化代数的データ型) を使って言語処理系を実装する - Qiita
                                                                        • 代数的データ型とパターンマッチングと - Qiita

                                                                          タイトルは意味不明です。 動機付け 代数的データ型 について、私の知りたかったことが ADTs for Python に書かれているように思います。とはいえ、当初 wikipedia (日本語) の説明を読んでもよく分からなくて、いくつかのブログやコードを読んで理解度を上げてから読んだため、最初にくだんのブログ記事を読んでも理解度が足らなかったかもしれないというのも否定はできません。 代数的データ型について、日本語で入門的な分かりやすいものを私は見つけられていなかったのですが、以下の説明が端的に表していて受け入れやすいように私は思いました。 第1章 関数プログラミングは難しくない!―初めて学ぶ人にも,挫折した人にもきちんとわかる 豊かなデータ型を持つ 一般的に関数型言語は,構造体(直積),共用体(直和),列挙型および再帰型を統合し,簡潔に表現できる豊かなデータ型を提供しています。この豊かな

                                                                            代数的データ型とパターンマッチングと - Qiita
                                                                          • C# 9.0でHaskellの代数的データ型(ADT)的な書き方をする - Qiita

                                                                            TL; DR C# 9.0ではHaskellのADT的な書き方ができて、しかも構文的に軽量 record構文と継承を用いることで実現 pretty print や、値に基づいた等価性比較も自動でついてくる 概要 2年前、私は C#にも代数的データ型(ADT)を軽量に定義できる構文がほしいの中で以下のように書いていました。 C#7, C#8 に入った機能追加によって、 C#でもADTっぽい値の処理が簡潔に書けるようになりました。 しかし、他の言語のADT定義構文と比較すると、C#ではADTっぽい型を定義するために必要な記述量が大変多いです。 そちらの記事ではADT的なコードの書き方を ADT的な構造の定義 ADT的な値の作成 ADT的な値の使用 に分けて捉えています。そちらの記事を書いた時点では「C# 8.0では ADT的な値の作成・使用は容易だが、 ADT的構造の定義が構文的に重い」という

                                                                              C# 9.0でHaskellの代数的データ型(ADT)的な書き方をする - Qiita
                                                                            • 代数的データ型がない言語とパターンマッチ|コンパイル技法: パターンマッチ

                                                                                代数的データ型がない言語とパターンマッチ|コンパイル技法: パターンマッチ
                                                                              • SwiftのEnumで見る代数的データ型ついて - Qiita

                                                                                この記事はNewsPicks Advent Calendar 2018の17日目の記事です。 はじめに 皆さんこんにちは。 NewsPicksでソフトウェアエンジニアをしている @kz_moritaです。よろしくお願いします。 NewsPicksには11/1にjoinしまして、約一ヶ月半ほど経ちました。 私は、これまでずっとスマートフォンゲーム開発 (サーバーとクライアント両方) やってきたのですが、現在は心機一転iOSエンジニアとして働かせてもらっています。 初めてのiOS/Swiftということでいろいろキャッチアップ中なのですが、色々触っていく中でSwiftのEnumには面白い点があるなと感じたのでそのことについて書いていこうかなと思います。 まずはじめに、SwiftのEnumについて紹介したのちに、代数的データ型(特に直和型)について書いていこうと思います。 Swift の Enum

                                                                                  SwiftのEnumで見る代数的データ型ついて - Qiita
                                                                                • 代数的データ型がめっちゃええ。

                                                                                  本記事はUzabase Advent Calendar 2023の19日目の記事です。 はじめに 株式会社ユーザベース BtoB SaaS Product Team(以下 Product Team)の山室です。 チームシャッフル[1]でこの10月から新しい開発チームに移籍したのですが、そこで初めて関数型プログラミング言語であるF#に触れました。 F#について学んでいく中で「代数的データ型」という概念を知り、普段の開発で使っていくほどに「めっちゃええやん」だったので、今回は代数的データ型についてまとめたいと思います! 代数的データ型 is 何? 代数的データ型(Algebraic Data Type: ADT)とは、特に関数型プログラミングで使われる、型を組み合わせることによって作られる型で、次の2種類から構成されます。 直積型 直積型(Product Types)は「積(AND)」を表現す

                                                                                    代数的データ型がめっちゃええ。