@@ -63,46 +63,8 @@ def Point.isOrigin (p : Point Int) : Bool :=
63
63
-- フィールド記法が使える!
64
64
#guard origin.isOrigin
65
65
66
- /- ## 無名コンストラクタ { #AnonymousConstructor }
67
- **無名コンストラクタ(anonymous constructor)** は、構造体 `T` に対して `T` 型の項を構成する方法のひとつです。これは以下に示すように、`⟨x1, x2, ...⟩` という構文により使うことができます。
68
- -/
69
- set_option linter.unusedVariables false -- #
70
-
71
- /-- 2つのフィールドを持つ構造体 -/
72
- structure Hoge where
73
- foo : Nat
74
- bar : Nat
75
-
76
- def hoge : Hoge := ⟨1 , 2 ⟩
77
-
78
- /- コンストラクタが入れ子になっていても平坦化することができます。例えば、以下の2つの定義は同じものを定義します。-/
79
-
80
- def foo : Nat × (Int × String) := ⟨1 , ⟨2 , " foo" ⟩⟩
81
-
82
- def foo' : Nat × (Int × String) := ⟨1 , 2 , " foo" ⟩
83
-
84
- #guard foo = foo'
85
-
86
- /- 一般の[ 帰納型 ] (../Declarative/Inductive.md)に対しては使用できません。-/
87
-
88
- inductive Sample where
89
- | fst (foo bar : Nat) : Sample
90
- | snd (foo bar : String) : Sample
91
-
92
- -- 「コンストラクタが一つしかない帰納型でなければ使用できない」というエラーになる
93
- /--
94
- warning: invalid constructor ⟨...⟩, expected type must be an inductive type with only one constructor ⏎
95
- Sample
96
- -/
97
- #guard_msgs in
98
- #check_failure (⟨" foo" , " bar" ⟩ : Sample)
99
-
100
- -- コンストラクタを指定しても使用できない
101
- #guard_msgs (drop warning) in -- #
102
- #check_failure (Sample.snd ⟨" foo" , " bar" ⟩ : Sample)
103
-
104
66
/- ## 項を定義する様々な構文
105
- 構造体の項を定義したい場合、複数の方法があります。波括弧記法が好まれますが、フィールド名が明らかな状況であれば無名コンストラクタを使用することもあります 。-/
67
+ 構造体の項を定義したい場合、複数の方法があります。波括弧記法が好まれますが、フィールド名が明らかな状況であれば [ 無名コンストラクタ ] (#{root}/Parser/AnonymousConstructor.md)を使用することもあります 。-/
106
68
107
69
-- コンストラクタを使う
108
70
def sample0 : Point Int := Point.mk 1 2
@@ -174,11 +136,6 @@ def Point'.x {α : Type} (p : Point' α) : α :=
174
136
let p := Point'.mk 1 2
175
137
p.x
176
138
177
- /- 無名コンストラクタは最初から使用できます。 -/
178
-
179
- -- 無名コンストラクタは使用できる
180
- def origin' : Point Int := ⟨0 , 0 ⟩
181
-
182
139
/- 波括弧記法は `structure` コマンドで定義された型でなければ使用できないようです。 -/
183
140
184
141
-- 波括弧記法は使用できない
0 commit comments