[英]Haskell compare two int with if statement
我想實現一個名為log2的函數,該函數計算其參數的整數對數(以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 .....
則基本上已經寫成log2 x = 0
。 可能希望第二個短語是與0
相同的定義或表達式的一部分,但if
兩者都不開始。
更一般而言,Haskell沒有可變變量。 您不能“分配”給y
。 最接近您想要的是
log2 x = until (\\y -> x == 2^y) (\\y -> y + 1) 0
注意,我們從未分配y
,我們只是將其綁定以執行每個lambda表達式。 我們可以想象它每次收到一個不同的名稱! 那很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.