gpt4 book ai didi

haskell - 如何定义一个接受数据类型的自然数并返回它们的总和的函数?

转载 作者:行者123 更新时间:2023-12-02 00:10:27 24 4
gpt4 key购买 nike

我仍在学习值(value)构造函数的工作原理。我阅读了很多有关数据类型及其值构造函数的内容。问题是我从未在实践中见过它们。例如

data Nat = Zero | Succ Nat

现在,如果我们想定义一个接受两个 Nat 输入并返回乘积的函数,我们该怎么做?如果我们想使用运算符 *,我们必须将它们转换为 Haskell Integrals。如果我们想实现一个 mult 函数,它接受两个 Nat,应该将它们相乘而不将它们转换为 Haskel Integrals,那会是什么样子?

我真的还没有得到数据类型|值构造函数。谁能从上面的数据 Nat 示例中说明如何正确使用此类值构造函数?

最佳答案

你可以实现mult :: Nat -> Nat -> Nat无需将参数转换为 Integer第一的。什么是乘法?就是重复相加,可以递归定义:

n * 0 == 0
n * m == n + n * (m - 1)

回想一下 m - 1Nat 的值由 Succ 包裹;如果m == Succ k , 然后 k代表m - 1 .考虑到这一点,您应该能够看到如何定义 mult ,假设您定义了 add :: Nat -> Nat -> Nat可用。

mult :: Nat -> Nat -> Nat
mult n Zero = ...
mult n (Succ m) = ...

add :: Nat -> Nat -> Nat可以类似地定义,使用基于重复递增的定义。

-- n + 0 = n
-- n + m = (n + 1) + (m - 1)
def add :: Nat -> Nat -> Nat
add n Zero = ...
add n (Succ m) = ...

关于haskell - 如何定义一个接受数据类型的自然数并返回它们的总和的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59306230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com