簡體   English   中英

Haskell將兩個int與if語句進行比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM