【问题标题】:Define function in Haskell with computations in arguments在 Haskell 中使用参数计算定义函数
【发布时间】:2015-08-29 17:46:13
【问题描述】:

如何在 Haskell 中定义这样的函数:

x(0)     = 1
x(2*k)   = sin(k) * cos(k)
x(2*k+1) = cos(k/2) - tan(2*k)

Haskell 不允许在其参数中定义带有计算的函数。它将引发“模式中的解析错误”错误。

如果我尝试用x(k) 定义所有内容,如下所示:

x(k) = sin(k/2) * cos(k/2)
x(k) = cos((k/2-1)/2) - tan(k/2-1)

我将为x(k) 定义两个无效的定义。

【问题讨论】:

  • 你忘记了 any 号码k 可以描述为2*k+1!另外n+k 模式默认禁用,据我所知n*k 模式不存在。

标签: haskell


【解决方案1】:

你可以这样定义:

f 0 = 1
f i | even i = sin(k) * cos(k)
    | otherwise = cos(k/2) - tan(2*k)
    where k = fromIntegral $ div i 2

我将x 替换为f,因为x 看起来更像一个变量,而不是一个函数。此外,我使用i 作为传入参数。

div i 2 表示您将i 除以2(并将结果取底),这样0 映射到01 映射到021。然后可以使用fromIntegral 将其转换为Floating;否则不能取sin等。

现在有两种情况(f 0 除外):一种ieven (2*k),另一种iodd(在本例中为@987654345 @)。您可以为此使用guards。对于偶数情况,我们现在使用sin(k) * cos(k) 和另一个cos(k/2)-tan(2*k)。请注意,对于k/2,我们使用浮点数,因此如果i7k 将是3,因此您将计算cos(1.5)-tan(6)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2011-07-20
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2014-10-02
    相关资源
    最近更新 更多