テクノロジー

hello worldはもう古い!自然数の定義からだろ!

がくし's icon'
  • がくし
  • 2020/02/03 10:33

●はじめに

二番煎じです。

 

関数型言語を学び始めたなら、hello worldより先に自然数の定義をするのが定石です。本稿では、最近私が学んだ言語での自然数の定義を紹介しようと思います。

 

●ペアノ自然数

ペアノの公理という以下の条件を満たすデータ型を定義します。学校で習う自然数とは異なり0も含むので、厳密にはペアノ自然数と呼ばれるものです。

1. 自然数 0 が存在する。

2. 任意の自然数 a にはその後者が存在する。

3. 0 はいかなる自然数の後者でもない。

4. 異なる自然数は異なる後者を持つ。

5. 0 がある性質を満たし、a がある性質を満たせばその後者 もその性質を満たすとき、すべての自然数はその性質を満たす。

1と2と3が分かれば問題ないです。要は、ゼロを表すデータと、引数の次の数字を返す関数を定義すれば終わりです。

 

●haskellの場合

data Nat = Zero | Suc Nat

ZeroとSuc Natという値を取るNat型を定義しています。Zeroは、それ自体をゼロを表す値として扱います。Sucは値コンストラクタという関数で、引数として与えられたNat型の値の次の数字を表します。具体的にどうやって数字を表すかを見たほうが理解が早いと思います。

Zero                  が数字の0

Suc Zero           が数字の1

Suc (Suc Zero)  が数字の2

といった具合に、帰納的に全ての自然数を表現できる事がわかると思います。

 

●Agdaの場合

data ℕ : Set where

 zero : ℕ

 suc : ℕ → ℕ

haskellの場合と構造は同じですが、表記が若干異なります。data ℕ : Setはℕが型である事を宣言し、where以降で値を定義しています。zero : ℕはzero自体がℕ型である事を表しています。suc  : ℕ → ℕは、ℕ型を引数に取ってℕ型を返す関数である事を意味しています。

 

●Coqの場合

Inductive nat : Set :=  O : nat | S : nat -> nat

Agdaとほとんど同じです。

 

 

●最後に

説明を色々すっとばしてるので、まったくもって分かり難いとは思いますが、関数型言語の雰囲気だけでも分かってもらえれば幸いです。

 

かしこ。

Supporter profile iconSupporter profile iconSupporter profile icon
Article tip 3人がサポートしています
獲得ALIS: Article like 33.79 ALIS Article tip 135.00 ALIS
がくし's icon'
  • がくし
  • @gaxiiiiiiiiiiii
養蜂家。暇な時にプログラミングをして遊んでる。

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
他カテゴリ

機械学習を体験してみよう!(難易度低)

Like token Tip token
124.82 ALIS
Eye catch
クリプト

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

Like token Tip token
947.13 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

Bitcoinの価値の源泉は、PoWによる電気代ではなくて"競争原理"だった。

Like token Tip token
159.32 ALIS
Eye catch
クリプト

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

Like token Tip token
46.60 ALIS
Eye catch
テクノロジー

iOS15 配信開始!!

Like token Tip token
7.20 ALIS
Eye catch
ゲーム

ドラクエで学ぶオーバフロー

Like token Tip token
30.10 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
テクノロジー

なぜ、素人エンジニアの私が60日間でブロックチェーンゲームを制作できたのか、について語ってみた

Like token Tip token
270.93 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
他カテゴリ

ALISのシステム概観

Like token Tip token
5.00 ALIS
Eye catch
テクノロジー

オープンソースプロジェクトに参加して自己肯定感を高める

Like token Tip token
85.05 ALIS