タグ

言語と関数型言語に関するnanakosoのブックマーク (11)

  • 直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton

    // 割る2をする関数の引数が偶数であることを型によって強制する例(実用性はない) data O // 数字の0を表すデータ型 data S(A) forall { A } // +1を表すデータ型 // 型エイリアス type Nat = O | S[Nat] // 非効率すぎる他倍長整数 type Even = O | S[Odd] type Odd = S[Even] // 偶数を引数にとって2で割った結果を言語組込みの整数として返す関数 div2 : Even -> I64 = // 網羅性チェックつきのパターンマッチ | O => 0 | S(S(n)) => 1 + n.div2 TL;DR ユニオン型は直和型の上位互換である(追記あり)。関数型言語を作るときは直和型の代わりにユニオン型を採用するのもあり。 はじめに Cottonというプログラミング言語を2021年の夏頃から作

    直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton
  • 関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記

    結論から言うと, 名前を付けることなく再帰的な関数を定義することは可能. 特定のプログラミング言語でどうかというよりは抽象概念としての関数の再帰を名前なしに実現可能かどうかという話(名前なしに実現できるプログラミング言語は存在するかという話). 発端 id:naoyaさんがこういうツイートをしていた. 再帰を書くときに何気なく関数に名前つけたり let で束縛したりしてたけど「再帰には三項関係が必要でありその実現には記号が質的に関わる」とあり、名前づけの行為が必然だったことが分かった。プログラミングするときの視点が変わるな— naoya (@naoya_ito) 2022年8月12日 たとえば以下のように書いたときのlet fact =みたいな話. let fact = n => n <= 1 ? 1 : n * fact(n-1) ちなみに, 話は一見逸れるけど, こう書けると必然的に

    関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記
    nanakoso
    nanakoso 2022/08/18
    典型的な「理論上不可能ではない」
  • 10行LISP評価器の実装例(各言語まとめ) - Qiita

    筆者いつもの各言語お遊び記事です.【関連記事】その1,その2,その3 目的 (表)様々なプログラミング言語によるラムダ式(静的スコープ)実装のリファレンスとするため. (裏)ラムダ式プログラミングを実装レベルで布教するため.難解プログラミングじゃないやい. 【参考】ラムダ式プログラミング一時間体験講座(Python/Ruby/JavaScript同時並行版) LISP評価器の仕様 基構文:lambda,if.Lisp-1のレキシカルスコープ.シンボルとして文字列を使用. 基関数:=,+,-.値として整数が利用可能. 実行コードはJSONの配列構造.カレントディレクトリのsample.jsonから読み込み. 評価器体で10行程度(1行80字以下目安,基関数適用やユーティリティ関数定義は除く). 実行コードは基的にS式表現と同じであり,構文・関数名と共にSchemeのサブセット仕様と

    10行LISP評価器の実装例(各言語まとめ) - Qiita
  • 型付けは難しい

    ベン・フィードラーのブログより。 型検査と型推論 型検査とは、あるプログラミング言語で与えられたプログラムを実行し、すべての変数や式が正しい型を持っているかどうかを調べるプロセスです。例えば、文字列は文字列に代入され、算術式は数値のみを使用するなどです。一部の言語では型推論を提供しており、コンパイラに自分で正しい型を見つけるタスクも提供します。言語の特徴に応じて、型検査と型推論の問題は、些細なものから決定不能なものまで様々です。 一般的な用語 完全性 正しく入力されたプログラムを全てチェックできれば、タイプチェッカーは完了です。 健全性 正しく型付けされたプログラムのみを受け付けるものであれば、型検査は健全です。 決定可能性 任意の入力に対して、その入力が問題を満足するかどうかを有限時間で計算できる場合、決定問題は決定可能です。決定可能な問題の例としては、素数判定や充足可能性などがあります

  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
    nanakoso
    nanakoso 2021/01/27
    セッション型はまだ言語上ではみたことないな
  • 技術書を自作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):関数型玩具製作所
  • 関数型とかの論争について - uehaj's blog

    身と蓋がナッシング まず身も蓋もないことをいうと、結局はCPUの命令セットとして動く言語ですからして、大差はないんですよね。 でもこういうことを言うのは、「どうせ宇宙なんて原子の集合だろ!」という小学生なみです。 なので言わない。でもその認識を捨ててもならない。魔法はないです。地続きではあるのです。 「命令型」か「関数型*1」か さてその上で、問うべき問いが、「命令型」か「関数型」であるならば、関数型に明確な優位性があらわれます。イミュータブルデータ。いい響きですね。map,filter,...いいですね。for禁止、シビれます。いいか、おまえら! forは禁止だ! 了解しました軍曹殿! この利点はあきらかで、かつ入手することが比較的容易です。scalaでもJava8でもreactでも、それなりに努力すればそれなりのものが手に入りそうです。 このレベルではOOPとの対立項はないんじゃないか

    関数型とかの論争について - uehaj's blog
  • 関数型なAltJS、PureScriptの入門書を邦訳しました。 - Qiita

    2018/4/30 追記: 古くなっていたこちらの邦訳ですが、プルリクエストを頂き最新版PureScript v0.11に対応しました。当にありがとうございました。 Haskellライクな関数型プログラミング言語PureScriptの入門書、"PureScript By Example"を邦訳しました。書はPureScriptのオリジナルの作者であるPhilさん人が執筆した入門書です。書を理解するにはJavaScriptを知っていることが望ましいですが、そうでなくともすでに何らかのプログラミング言語を知っていれば読みこなすことはできると思います。PureScriptはHaskellを始めとした多くの関数型言語と様々な考え方を共有していますから、PureScriptという言語そのものを学ぶという目的でなくとも、関数型プログラミング全般についての入門としても読むにも適しています。無料で

    関数型なAltJS、PureScriptの入門書を邦訳しました。 - Qiita
  • マルチコア時代のプログラマは関数脳になろう〜Scala・Clojure〜 - Tech-Sketch

    前回 の記事では、関数型プログラミングの概念とJava8による実装例を示しました。しかしJava8のリリースは来年まで延期されてしまったため、今すぐ試してみるには少しハードルが高いかもしれません。 そこで今回は、Java7のJVM上で動作する代表的な関数型プログラミング言語、 Scala と Clojure を紹介します。 Scalaとは では、 Scala から紹介しましょう。 ScalaはJVM上で動作するプログラミング言語で、関数型の特徴とオブジェクト指向の特徴を合わせ持った、欲張りな言語です。 JVM上で動作するため、既存の膨大なJavaライブラリをそのまま流用でき、JVMのパフォーマンスチューニングノウハウを最大限活用することができます。またJavaよりも豊富な記述形式を持ちながらもJavaオブジェクトをそのまま扱え、強力な型推論を持った静的型付け言語でもあるため、定型的で冗

  • 関数プログラミングの楽しみ - あどけない話

    レビューに参加した「関数プログラミングの楽しみ」が届きました。これは、関数プログラミングの入門書をいくつか読んだ人が、もっと高みを目指すためのです。 関数プログラミングの楽しみ 作者: Jeremy Gibbons and Oege de Moor,山下伸夫出版社/メーカー: オーム社発売日: 2010/06/23メディア: 単行(ソフトカバー)購入: 3人 クリック: 98回この商品を含むブログ (17件) を見る 目次 このは、関数プログラミングの父 Richard Bird が還暦を迎えることを記念して、著名人が各章を寄稿し、編集した構成となっています。コードはすべて Haskell で書かれています。目次は以下の通りです。 二分ヒープ木の楽しみ 仕様に基づくテスト -- QuickCheck を使って おりがみプログラミング Haskellで音楽を記述し解釈する 融合変換を自

    関数プログラミングの楽しみ - あどけない話
  • プログラミング言語の特徴を、実行速度と簡潔さで見る

    プログラミング言語にはさまざまな種類、CやJavaPerlなど、が存在します。理想的なプログラミング言語の定義は条件やプログラマーの好みによってさまざまだとは思いますが、やはり実行速度が速いこと、できれば簡潔に記述できた方がよい、という条件に同意する方は多いのではないでしょうか。 さまざまなプログラミング言語のベンチマークを実行し、その結果を報告しているWebサイト「The Computer Language Benchmarks Game」を紹介しているのが、ブログ「Radium Software」の記事「プログラミング言語の特徴を視覚的に比較する」です。 「The Computer Language Benchmarks Game」では、ベンチマークの結果とそのコードの関係をグラフにした「interpret scatter plot shapes」というWebページが公開されています

    プログラミング言語の特徴を、実行速度と簡潔さで見る
  • 1