並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 20 件 / 20件

新着順 人気順

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

  • TypeScriptで学ぶ代数的データ型

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

      TypeScriptで学ぶ代数的データ型
    • 代数的データ型を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の「はたらく人」と「トガッた技術」
      • Kotlin sealedタイプによる論理和型の実装: ポリモーフィズム形式と代数的データ型形式 - ドワンゴ教育サービス開発者ブログ

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

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

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

            代数的データ型と初等代数学
          • 代数的データ型とパターンマッチの補遺: 赤黒木 | κ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
            • 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
              • 代数的データ型がない言語とパターンマッチ|コンパイル技法: パターンマッチ

                  代数的データ型がない言語とパターンマッチ|コンパイル技法: パターンマッチ
                • 代数的データ型がめっちゃええ。

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

                    代数的データ型がめっちゃええ。
                  • 代数的データ型とその双対性 - エムスリーテックブログ

                    こんにちは,エムスリーエンジニアリンググループの榎田(Twitter: @niflh)です.今年度の4月に新卒で入社しました.入社してからは AI・機械学習チームというところで機械学習プロダクトのインフラのお仕事をしていましたが,11月末からチームを異動し,Unit4 というチームにいます.このチームでは医療系ポータルサイト m3.com のメディア系サービスや,全ページに共通で表示するヘッダーメニューの開発などをしています. これらの開発では Scala が使われていることを異動後に知りました.私は直近で Scala を使う案件は持たない予定ですが,少なくともレビューで Scala のコードは読むので,いい機会だと思って年末年始から勉強を続けています.その際に読んだ "Essential Scala"*1 という本にて,「代数的データ型」(Algebraic Data Type, ADT

                      代数的データ型とその双対性 - エムスリーテックブログ
                    • Haskellの代数的データ型 - Haskell勉強会

                      Haskellの学習で直和型や直積型など、代数的データ型を理解すれば良いという話がありました。 haskell.hatenablog.com 本物のHaskellを書くには何が必要ですか? この言語の中核は非常に単純です。 作成方法と使用方法を理解している場合 純粋な関数と値 パターンマッチング 直和型と直積型 副作用を作るためにIOをつなぐ方法 直和型とか直積型というデータ構造については、「入門Haskellプログラミング」という本でも説明されています。 haskell.hatenablog.com UNIT 3 型によるプログラミング LESSON 16 直積型と直和型 補足情報を得るため、ネットでも検索してみました。 www.google.com ja.wikipedia.org 代数的データ型(英: Algebraic data type)とはプログラミング、特に関数型プログラミン

                        Haskellの代数的データ型 - Haskell勉強会
                      • 代数的データ型は木構造で表現されるとあるが、どのような構造になるのかよくわからない

                        前置き 下記の例のように代数的データ型は木構造で表現されるという説明がありますが、どのような構造になるのかいまいち理解できません。 代数的データ型 - ウォークスルー Haskell 代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです. 配列のような一部の例外を別とすれば,Haskell で取り扱うあらゆるデータ型は代数的データ型です. もう少しきちんと説明すると,代数的データ型は項(term)の形で表されるデータの集合を定義するデータ型です. Algebraic data type - Wikipedia For a slightly more complex example, binary trees may be implemented in Haskell as follows: data Tree = Empty

                          代数的データ型は木構造で表現されるとあるが、どのような構造になるのかよくわからない
                        • 代数的データ型の作り方(値コンストラクタ,型コンストラクタについて)

                          データ型の正体はメモリICです。メモリICにあるピンの1本1本が電気のON/OFFをします。これによってデータを格納する場所(アドレス)を表します。 しかしメモリICのピン(0と1の数字)としてメモリを扱うのは少し考えづらいですよね。そこで以下のようなビルディングとして捉えることにしました。 メモリが実際にこのようなビルディングの形ではない点に注意して下さい。あくまで実体としてはメモリICのピンです。しかし私たちが扱いやすいように捉え方を変えています。論理的というのは「(実際の形とは違うけれども)私たちが扱いやすい/考えやすい」という意味です。この中でデータ型はどのように扱われるのでしょうか。例えばIntというデータ型があった際、4フロア分のメモリスペースが確保されます。0と1の数字を並べていただけの時よりもこちらの方がわかりやすいですよね。 集合としてのデータ型 しかしビルディングだけで

                            代数的データ型の作り方(値コンストラクタ,型コンストラクタについて)
                          • 代数的データ型の再帰的定義 | tnomuraのブログ

                            Haskellの代数的データ型は再帰的定義ができる。次のデータ型 Tree a は簡単な2分木の構造を定義できる。

                              代数的データ型の再帰的定義 | tnomuraのブログ
                            • 一般化された代数的データ型 (GADT)|Haskellでの型レベルプログラミング

                              一般化された代数的データ型 通常の代数的データ型はデータ構築子(タグ)により分岐の種類やその他値レベルの情報を持っていますが、一般化された代数的データ型 (generalized algebraic data type; GADT) を使うとデータ構築子に型に関する情報を持たせることができます。 例えば、幽霊型のところで紹介した型付きの構文木はGADTを使うと次のように書けます: data Expr (a :: Type) where Const :: Int -> Expr Int Add :: Expr Int -> Expr Int -> Expr Int Equal :: Expr Int -> Expr Int -> Expr Bool IfThenElse :: Expr Bool -> Expr a -> Expr a -> Expr a データ構築子 Const と Add

                                一般化された代数的データ型 (GADT)|Haskellでの型レベルプログラミング
                              • 日常のプログラミングに圏論を応用する - 代数的データ型とVisitorパターンの同型性

                                代数的データ型の重要性は広く知られている(と思う)が、一般に使われるプログラミング言語にはまだまだ浸透していない。 代数的データ型で物事を考える習慣がつくと、これをサポートしない言語で仕事をするのはフラストレーションが溜まる。 幸いなことに、代数的データ型を直接にはサポートしない言語でも、代数的データ型と“実質同じ”型を定義する方法がある。 本記事では、代数的データ型の比較的シンプルな例を取り上げて、それを定義する方法と、それが上手くいく圏論的な理由を簡単に紹介する。 サンプル言語はTypeScript[1]だが、総称型(ジェネリクス)をサポートする言語であれば上手くコード化できるはずである。 Maybe型 代数的データ型のシンプルな例として、今回は Maybe を取り上げたい。 任意の型 T について、型 Maybe<T> とは、値が“ない”ことを示す値 Nothing か、値 t: T

                                  日常のプログラミングに圏論を応用する - 代数的データ型とVisitorパターンの同型性
                                • 代数的データ型と FizzBuzz と - Qiita

                                  タイトルは意味不明です。 PyAlgebraicDataTypes を使って遊んでみました。Racket という言語に触発されて 代数的データ型 を Python で表現するといったライブラリのようです。学習向けに小さくて良さそうだったので試してみました。 >>> from adt import ADT, Require >>> class List(ADT): pass ... >>> class Nil(List): pass ... >>> class Cons(List): ... car = Require(int) ... cdr = Require(List)

                                    代数的データ型と FizzBuzz と - Qiita
                                  • 代数的データ型のひみつを暴いて関数型プログラムを攻略する (2020/04/14 19:30〜)

                                    お知らせ connpassではさらなる価値のあるデータを提供するため、2024年5月23日(木)を以ちましてイベントサーチAPIの無料での提供の廃止を決定いたしました。 2024年5月23日(木)以降より開始予定の「connpass 有料API」の料金プランにつきましてはこちらをご覧ください。 なお有料の対象となるのはAPIのみであり、connpassのサービスにつきましては今後も無料でご利用いただけます。

                                      代数的データ型のひみつを暴いて関数型プログラムを攻略する (2020/04/14 19:30〜)
                                    • 代数的データ型とオブジェクト指向プログラミングと - Qiita

                                      タイトルは意味不明です。 関数型プログラミング (言語) について書かれたエッセイがあります。 Why the next language you learn should be functional なぜ次に学ぶ言語は関数型であるべきか 素晴らしい翻訳記事があるので私はそちらを読みました。 このエッセイの中で OCaml で表現された 代数的データ型 とパターンマッチの例が紹介されています。 OCamlでの表現型と評価器 type 'a expr = | True | False | And of 'a expr * 'a expr | Or of 'a expr * 'a expr | Not of 'a expr | Base of 'a let rec eval eval_base expr = let eval' x = eval eval_base x in match exp

                                        代数的データ型とオブジェクト指向プログラミングと - Qiita
                                      • Kotlin言語において既存の似ているクラスを変更しないで同じものとして扱いたい。sealedを使って代数的データ型(直和型)で表現できた話。 - Qiita

                                        data class PBook(var ID: Long, var name:String, var kakaku: Int) data class EBook(var ID: Long, var title:String, var price: Int) それらをBook(書籍)クラスとして統合して扱いたい場合に、Kotlinではどのように表現すればよいでしょうか?その際に、PBook、EBookクラスに変更を加えてはならないという制約を課します。 組織的な制約だったり、そもそも紙書籍サーバと、電子書籍サーバは別々に開発されてきた経緯があったり、利用しているフレームワークやライブラリなどの関係で手を入れられないなど、現実の開発ではよくある制約だと思います。 制約がなく自由に修正して良かったら、、、 PBook、EBookクラスに変更を加えてはならないという制約がなければ、以下のようにす

                                          Kotlin言語において既存の似ているクラスを変更しないで同じものとして扱いたい。sealedを使って代数的データ型(直和型)で表現できた話。 - Qiita
                                        • Kotlin で 代数的データ型(ADT) を使ってモデル化 - nakaoka3の技術ブログ

                                          関数型プログラミングでは、型を組み合わせて作る型に直和型(sum type)と直積型(product type)が存在する。直和型と直積型のことを代数的データ型という。 『なっとく!関数型プログラミング』では、Scala、F#, Haskell で代数的データ型によるモデル化の例が紹介されていた。 残念なことに、どれも普段触っているプログラミング言語ではない。仕事で触る可能性があるのはバックエンドでPerl、バックエンド・フロントエンドがTypeScript,AndroidアプリでKotlinおよびJava, iOSアプリでSwiftだ。 なので、その中から Kotlinについて代数的データ型によるモデル化を試して見ることにした。Kotlinのバージョンは1.9で試している。 アーティストのモデル化 アーティストはジャンル、活動期間、出身地の情報を持っていて、これを代数的データ型を使ってモ

                                            Kotlin で 代数的データ型(ADT) を使ってモデル化 - nakaoka3の技術ブログ
                                          1