【发布时间】:2017-10-12 10:43:05
【问题描述】:
我可以通过手动编写比较器来比较两个自然数:
is-≤ : ℕ → ℕ → Bool
is-≤ zero _ = true
is-≤ (suc _) zero = false
is-≤ (suc x) (suc y) = is-≤ x y
不过,我希望标准库中有类似的东西,所以我不会每次都写。
我能够找到_≤_ 运算符in Data.Nat,但它是一种参数化类型,它基本上包含一个特定数字小于另一个的“证明”(类似于_≡_)。有没有办法使用它或其他方法来了解哪个数字小于另一个“运行时”(例如返回相应的Bool)?
我要解决的更大的问题:
- 作为我任务的一部分,我正在编写一个
readNat : List Char → Maybe (ℕ × List Char)函数。它尝试从列表的开头读取自然数;稍后将成为sscanf的一部分。 - 我想实现
digit : Char → Maybe ℕ帮助函数,它会解析一个十进制数字。 - 为此,我想将
primCharToNat c与primCharToNat '0'、primCharToNat '1'进行比较并决定是返回None还是(primCharToNat c) ∸ (primCharToNat '0')
【问题讨论】:
-
在您发现的模块中,有一个证明
_≤?_证明_≤_是可判定的。您可以使用它来代替Boolean 函数。