From 52b8a4ce804a472f9f36e66840e2f060692022f2 Mon Sep 17 00:00:00 2001 From: Yuji Ueki Date: Mon, 9 Nov 2020 03:08:55 +0900 Subject: [PATCH] :+1: Create programming language article --- ...1-01-category_programming_language.html.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 source/articles/2020-11-01-category_programming_language.html.md diff --git a/source/articles/2020-11-01-category_programming_language.html.md b/source/articles/2020-11-01-category_programming_language.html.md new file mode 100644 index 00000000..939a9db8 --- /dev/null +++ b/source/articles/2020-11-01-category_programming_language.html.md @@ -0,0 +1,28 @@ +--- +title: 圏論 | 使用する言語 +tags: programming,category_theory +--- + + +結論から言うと、Rubyで説明しようと思う。 +理由としては、 HaskellやScala、Swiftはよく説明に利用されているのに対して、Ruby等の動的型付けな言語ではあまり説明がされないことによる。 +が、下記のような言語のサブセットを考えることにより、型を対象、射を関数とした圏を作ることはできるだろうし、そこから得られるモナドなどの構造は当たり前に有用であるし、すでに利用されている。 +静的型付けな言語の経験があったり、よく訓練されたプログラマーなら関数の純粋性の重要性を理解していると思うので、自然と下記の様なサブセットを前提としてプログラムを書いているように思う。 + +さらに直近、 Ruby3では型定義やプロファイラの利用が可能になるため、従来よりも型に向き合わなければいけない度合いが増える、という話もあったりする。 + +- 関数について + - 入力の型と出力の型は決まっていものとする + - 実装が変化したりしない + - 純粋な関数とする + - 例外をださない + - 副作用を行わない + - 値を必ず返す + - ユニット型はOK + - `() -> Int` + - `Int -> ()` + +- 関数の同値性 + - 全ての `x` に対する返り値が値が等しい + +[^]: よくある誤解で、Ruby は静的型付けじゃないので型がない(?)のような