首页 > 解决方案 > Haskell 比较两个 int 和 if 语句

问题描述

我想实现一个名为 log2 的函数,它计算其参数的整数 log(以 2 为底)。我不能使用日志功能。我的解决方案是:检查 x 是否等于 2^y。如果 x 等于 2^y,则给出值 y,如果 x 不等于 2^y,则 y = y + 1。这将一直持续到找到 y。这是我到目前为止得到的:

log2 x = y where y = 0
    if x == 2^y then y
    else y = y + 1

当我想运行它时,我会得到这个错误:

错误:输入“if”时解析错误

我是 Haskell 的新手,所以有人可以解释我怎么了?

标签: if-statementhaskell

解决方案


很难准确解释为什么会出现语法错误,因为它要对应的(有效)语法并不明显。可以说你基本上已经写过了log2 x = 0 if .....。人们可能期望第二个短语是与 相同的表达式的定义或一部分0,但if两者都不是开头。

更一般地说,Haskell 没有可变变量。您不能“分配”给y. 最接近你想要的东西是这样的,

log2 x = until (\y -> x == 2^y) (\y -> y + 1) 0

请注意,我们从未分配给y,我们只是将其绑定以执行每个 lambda 表达式。我们可以想象它每次都会收到不同的名字!那很好。


推荐阅读