- 2025/6/15
- https://2025.fp-matsuri.org/
Julia という言語について
- Julia
- 科学技術計算に強い
- 動的言語なのに動作が速い
- 多重ディスパッチ
- 文と式
- Juliaは全て式
- ifもtryも
- 関数は第一級オブジェクト
- Juliaは全て式
- 型システム
- クラスはない
- 継承もない
- 型はimmutable
- フィールドへの再代入はできない
- mutable structで宣言すると再代入できる
- Any/Union
より安全で単純な関数定義
がくぞさん
https://gakuzzzz.github.io/slides/cardinality_of_types/
- Listの中からmaxを返す関数
- Listが空の場合をどこで制御するか
- 戻り値をOptionalにする?
- 引数をEmptyを受け付けないようにする?
- 型のCardinality
- その型がどんな種類の値を取ることができるか
- Booleanはtrue/falseなので2
- Byteは-128〜128なので256
- Option[A]はAの数+1
- Option[Bookean]は3
- Option[Byte]は257
- Either[A,B]はAの数+Bの数
- NonEmptyList[A]はList[A]-1
- 元のお題に当てはめると
- 戻り値をOptionalにする
- 引数がList[A]なのでA
- 戻り値がA+1
- 引数をEmptyを受け付けないようにする
- 引数がA-1
- 戻り値がA
- 後者の方がCardinarityが小さくなる
- 引数で制約を制約を表現した方が関数の複雑性を減らせる
- 例えばテストの複雑さも減る
- 特に強い理由がなければ引数での制約から考えた方が良い
- 引数で制約を制約を表現した方が関数の複雑性を減らせる
- 戻り値で制約する関数は引数で制約する関数をラップすることで簡単に作れる
- 戻り値をOptionalにする
数理論理学からの『型システム入門』入門?
ほとけ/Motoki Shakagoriさん
https://slides.buddha0818.workers.dev/fp-matsuri2025
- 論理学
- 推論
- いくつかの前提から1つの結論を導くこと
- 意味論
- 前提が全て真である時に結論も真
- 証明論
- 前提にいくつかの規則を有限回適用して結論を導く
- 前提が真か偽かは考えない
- PとQが証明済みと与えられたらそのままPかつQも証明可能という発想
- 有限な記号に対して機械的に規則を適用していくだけ
- 部分的な証明に分解されていつか止まる
- 健全性
- 証明可能なら妥当
- 完全性
- 妥当なら証明可能
- 推論
- 型システム
- 型安全性
- プログラムが型付け可能なら望ましくない振る舞いが起こらない
- 証明可能なら妥当という状態
- 型安全性
Gleamという選択肢
こまもかさん
https://speakerdeck.com/comamoca/gleamtoiuxuan-ze-zhi-jia
Scala の関数型ライブラリを活用した型安全な業務アプリケーション開発
Tomoki Mizogamiさん
https://criceta.com/fp-matsuri-2025/1