data Nat = Z | S Nat
Run Code Online (Sandbox Code Playgroud)
例如,我们可以使用此数据类型来表示前几个数字:
Z
代表0
,S Z
代表1
,S (S Z)
代表2
,等等.
- 平等(即
x == y
),- 小于(即
x < y
),- 小于或等于(即
x ? y
),- 大于(即
x > y
),- 大于或等于(即
x ? y
).
1.
(?) :: Nat -> Nat -> Bool
Z ? Z = True
Z ? (S n) = True
(S n) ? (S m) = n <?> m
x ? z = False
Run Code Online (Sandbox Code Playgroud)
2.
? :: Nat -> Nat -> Bool
(S n) ? Z = True
(S n) ? (S m) = n <?> m
x ? z = False
Run Code Online (Sandbox Code Playgroud)
我不明白它与(S n)的含义以及我们应如何区分最后的X和Z.
你的构造者在这里
-- zero
Z
Run Code Online (Sandbox Code Playgroud)
和
-- nonzero n
S n
Run Code Online (Sandbox Code Playgroud)
您的第一个示例着眼于:
(?) :: Nat -> Nat -> Bool
Z ? Z = True
Z ? (S n) = True
(S n) ? (S m) = n <?> m
x ? z = False
Run Code Online (Sandbox Code Playgroud)
所以我们去试试吧.我们可以从(==)
这个断言开始,看看它是否都失败了.
Z == Z = True -- makes sense
Z == (S n) = True -- FAIL
Run Code Online (Sandbox Code Playgroud)
这不应该是真的,因为你的零不会等于任何非零值.实际上,它应该小于任何非零值!让我们再试(<)
一次
Z < Z = True -- Whoops...
Run Code Online (Sandbox Code Playgroud)
坚持,零不低于自己,但它们小于或等于自己.我们来试试吧(<=)
.
Z <= Z = True -- Uh huh
Z <= (S n) = True -- Yup
(S n) <= (S m) = n <= m -- S n <= S m when n <= m, makes sense!
x <= z = False -- Any other construction should be False, e.g.
-- (S n) <= Z
Run Code Online (Sandbox Code Playgroud)
我会继续把第二个问题留给你,因为你希望能够更好地理解被问到的内容!
归档时间: |
|
查看次数: |
73 次 |
最近记录: |