タグ パターンマッチ
人気順 5 users 50 users 100 users 500 users 1000 usersJava21とKotlinの代数的データ型 & パターンマッチの紹介と本当に嬉しい使い方 / Algebraic Data Type in Java and Kotlin: Happy Use of Pattern Match
JJUG CCC 2023 Fall で発表された内容です。 Java21ではパターンマッチがswitch式で正式に使えるようになります。 https://openjdk.org/jeps/441 これらの変更により型の検査がより強化されて、より実行時例外がすくなくコンパイル時に多くの実装ミスが検出できるようになります。 本セッションではJava21のパターンマッ... 続きを読む
『なっとく!関数型プログラミング』は読者の理解度の進捗を先読みして作り込まれた”プログラミング入門”の良書 - Magnolia Tech
なっとく!関数型プログラミング 作者:Michał Płachta翔泳社Amazon 良い、買おう、読もう、(コードを)書こう、以上! めっちゃ良いですよ、この本 中盤のプリミティブじゃやりづらい→直積→直和→二つ合わせてADT→値を取り出すためのパターンマッチの解説の流れの疾走感がいいですね— magnoliak🍧 (@magnolia_k_) 2023年... 続きを読む
正規表現の先読み・後読み
正規表現の「先読み(lookahead)」「後読み(lookbehind)」について紹介します。 正規表現の「位置へのマッチ」 正規表現は、文字列のパターンマッチに使われます。例えば [0-9]{4} は数字4つが並ぶ文字列にマッチする表現です。 多くの正規表現は「文字列」にマッチしますが、「文字列」ではなく「位置」にマッチする... 続きを読む
TypeScriptのexhaustiveness checkをスマートに書く
TypeScriptではデザインパターンとしてtagged unionによる直和がよく使われます。このときパターンマッチに相当する処理はswitchで行われますが、そこで直和に対する分岐が網羅的であることの保証を実行時と型検査時の両方で賢く行う方法がこれまでも模索されてきました。 今回、ヘルパー関数を導入せずにいくつかの問題... 続きを読む
コンパイル技法: パターンマッチ
本書では関数型言語をはじめとして多くの言語にあるパターンマッチをコンパイルする方法を紹介します。パターンマッチはシンプルに条件分岐の連鎖にコンパイルすることもできますが、よく研究された手法を使えば驚くほど効率的なコードを生成できるようになります。そのような手法を2種類紹介します。 パターンマッチは... 続きを読む
Ruby3.0でのパターンマッチ機能の変更点 - メドピア開発者ブログ
こんにちは、メドピアのサーバサイドエンジニアの草分です。 2020年12月25日、ついに待望のRuby3.0がリリースされましたね。 以前、Ruby2.7で発表されたパターンマッチについての記事を執筆したのですが、Ruby3.0になりいくつか追加/変更が入っています。 この記事ではそれらの変更点を確認していきます。 「Rubyのパタ... 続きを読む
Ruby 2.7正式版が登場、オブジェクトのパターンマッチ、REPLの改善など。次はRuby 3が年内登場予定! - Publickey
毎年12月25日のクリスマスにアップデートされるオブジェクト指向スクリプト言語の「Ruby」。今回も新バージョンとなるRuby 2.7正式版が予定通り、2019年12月25日にリリースされました。 Ruby 2.7の主な新機能は、case文でのオブジェクトのパターンマッチ、コマンドラインからRubyが利用できるirbにおける複数行編集の対... 続きを読む
Ruby 2.7のここがすごい! パターンマッチ、コンパクションGCなどをリリースマネージャーに聞いた - エンジニアHub|若手Webエンジニアのキャリアを考える!
まつもとさんはとにかく忙しくて 実はすごいirbの改良 パターンマッチはRubyをどう変えるか キーワード引数は、端的に壊れていたのを大整理した 高速化に向けたいくつかの観点 Ruby 2.7で導入される「コンパクションGC」とは Ruby 3のビジョンは「静的解析」「並行並列」「JIT」 関連記事 プログラミング言語Rubyには、... 続きを読む
Ruby 2.7.0 リリース
Ruby 2.7シリーズ最初の安定版である、Ruby 2.7.0がリリースされました。 Ruby 2.7には、多くの新しい機能やパフォーマンスの改善が含まれます。 その一部を以下に紹介します。 Pattern Matching [Experimental] 関数型言語で広く使われているパターンマッチという機能が実験的に導入されました。 渡されたオブジェクト... 続きを読む
続くといいな日記 – type family を使って再帰的 ADT をオープンにする
元ネタは Trees that grow . Haskell では代数的データ型 (ADT) を使ってプログミングに使うデータ構造を定義し,その構造を操作することによりプログラミングを行う. ADT はパターンマッチが容易で,再帰的に定義でき,基本的に閉じた構造になっている.そのため便利な反面,その機能が保守で仇となる場合もある.こ... 続きを読む
Ruby2.7の(実験的)新機能「パターンマッチ」で遊ぶ - メドピア開発者ブログ
はじめまして、メドピアのサーバサイドエンジニアの草分です。 RubyKaigi2019 1日目のセッションにてRubyのexperimental(実験的)な新機能「パターンマッチ」(Pattern Matching)が発表されましたね。 speakerdeck.com この記事では発表で紹介されたパターンマッチの各種機能を確認し、遊んでみます。 概要 Rubyのパターン... 続きを読む
Rustに入門した - The curse of λ
Rustに入門して2週間くらい経ったぜ TL;DR Rustは普通に便利ないい言語 入門した 入門にあたっては プログラミング言語Rust を読んだ。 これ の翻訳版ぽい。 読んでRustに対して思ったこと: 読んだやつは古いドキュメントの翻訳版だったようで一部記述が古いっぽかった 構文はシンプルだけど必要なものは揃ってる感 ML風でADTもパターンマッチもあるしtraitもあって言うことナシでし... 続きを読む
Elixir のバイナリデータに対するパターンマッチで AIFF を解析する - Qiita
バイナリに対するパターンマッチでバイナリを分解 Elixir のパターンマッチはバイナリデータに対して利用することが可能で、実際、なかなか実用的である。 例えば 4バイトずつ整数と文字列が連続して埋まっているバイナリがあったとすると <<size::unsigned-integer-size(32), id::bitstring-size(32)>> = some_data というパターンマッチを... 続きを読む
Elixir のパターンマッチを攻略しよう - Qiita
Elixir にあって Ruby や JavaScript のような言語にない特徴といえば 軽量プロセス (+ OTP周り) パターンマッチ の2点が大きく、その他の部分というのはだいたい「あの言語のこれだな」という風に対応させて理解できる(パターンマッチを実装した他の関数型言語になれてる人にとっては別かもしれないが)。 特に後者のパターンマッチの方は Elixir の文法の多くの部分の基礎になっ... 続きを読む
RubyにHaskellよりも強力なパターンマッチを実装した - Qiita
require 'egison' match_all(object) do with(pattern) do ... end end match(object) do with(pattern) do ... end with(pattern) do ... end ... end パターンマッチに成功すると、withに渡されたブロックが実行され、その結果が返されます。 このライブラリのパターンマ... 続きを読む
初学者向けの Scala Tips (5) - パターンマッチと無名関数の組み合わせを簡潔に書く - kmizuの日記
2014-05-25 初学者向けの Scala Tips (5) - パターンマッチと無名関数の組み合わせを簡潔に書く Scala初学者の方が書くコードには、しばしば以下のようなものが散見されます。 list.map {x => x match { case A => case B => case _ => } } 無名関数を作るための構文である{x => ...}とexp match { cas... 続きを読む
初学者向けの Scala Tips (4) - パターンマッチのcase節には複数の式が書ける - kmizuの日記
2014-05-12 初学者向けの Scala Tips (4) - パターンマッチのcase節には複数の式が書ける ときどきみかけるコードなのですが、パターンマッチを使ったコードで、次のようなものがあります。 exp match { case A => { expA1 expA2 ... } case B => { expB1 exbB2 ... } } Scalaでは、case節に複数の式を続... 続きを読む
Underscore.jsがちょっと便利だったので紹介してみる。 - (define -ayalog '())
2014-02-16 Underscore.jsがちょっと便利だったので紹介してみる。 JavaScript CoffeeScript 数日前@naoiwata師匠に「JavaScriptにパターンマッチってないですよね?」って聞いていたら「Underscore.jsならあるかも」みたいなことをそそのかされたので少し触ってみた。Underscore.jsは関数型プログラミングをしたい人のための軽量... 続きを読む
Javaを創ろう - bitter_foxの日記
この記事はJava Advent Calendarの13日目の記事です. 昨日は@kisさんのJava SE 8でパターンマッチを実装するでした. 明日は@megascusさんです. 皆さんはおそらく普段からJavaを使ってプログラムを作っているかと思います. そんな皆さんはJava言語について多くの思い・想いを持っているかと思います. 例えば,「こんな事ができたら良いのに」だったり,「ここが良く... 続きを読む
Java SE 8でパターンマッチを実装する - きしだのはてな
Java Advent Calendar 2013の12日目のエントリです。昨日はtorutkさんでした。Java Advent Calendar 2013 11日目 - Java SE 8の新クラス・メソッド一覧 - torutkの日記明日はbitterfoxさんがマニアックな記事を書くんだと思います。 ところでパターンマッチ実は去年のAdvent Calendarでもパターンマッチを考えていま... 続きを読む
中国の「Great Firewall」ではパターンマッチを使ったDNS監視も行われている | スラッシュドット・ジャパン IT
あるAnonymous Coward 曰く、IIJの松崎吉伸氏が、中国のネット検閲/フィルタリングシステム「Great Firewall」(金盾)に関する「中国でGreatだよ」(PDF)という資料を公開している。 中国の名高いアクセス制御技術の一端が垣間見えるデータを揃えている資料であり、Twitter.comなどのドメインがDNS的にどのように処理されるのかが分かる。 DNSではUDPおよびT... 続きを読む
Dropboxの中が散らかりまくってる人は、条件付けでファイルを自動分類 :教えて君.net
「SortMyBox」は、Dropboxと連携して動作するサービスだ。Dorpbox内にあるファイルを、設定した条件に従って、自動的にフォルダごとに分類できる。条件は、ファイル名、拡張子、正規表現によるパターンマッチの3種類。 振り分けは15分おきに行われるので、すぐに移動はされないが、放っておけば条件通りに整理されるようになる。Dropboxがフォルダだらけで、大事なファイルを取り出すときに時間... 続きを読む
Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream
Perlの話題を日本語で – Lingr で出た話題です。Perlの正規表現マッチはパターンが単純だと index() とおなじく Boyer-Moorアルゴリズムで検索するので非常に高速です。要は最適化のつもりでパターンマッチをindex()に書き換えるのは無意味なのです。ソースは pp.c や regexec.c あたりを fbm_instr() で検索かな? ドキュメントもどこかで読んだ気が... 続きを読む
常にマッチする正規表現を使えばJavaScriptでも固定位置でのパターンマッチができる - rikubaの日記
JavaScript, 正規表現パターンの末尾に「|」を付け加えると、その正規表現は常にマッチする。 /aaa/.exec("xyz"); // => null /aaa|/.exec("xyz"); // => [""] これを使えば、ある位置でのみパターンマッチを行うということ(Perl の正規表現で「\G」のメタ文字を使うようなこと)が JavaScript でもできる(Firefox に限... 続きを読む
ラムダ計算で代数的データ型を表現する方法 - Meta reifier @syamino
ラムダ計算ラムダ計算でEitherEither型の値をパターンマッチする状況を考えます。「データコンストラクタのパターンマッチ」は,下図のようにしてラムダ計算で表現できます。 ラムダ計算でBool今度は,Bool型の値をパターンマッチする状況を考えます。TrueやFalseには引数が無いので,(3)や(4)はλで囲みません。 パターンマッチ = 「データコンストラクタを他の関数に置き換えること」パ... 続きを読む