簡體   English   中英

在Haskell中構造二進制數

[英]Construct binary numbers in haskell

我是Haskell編程語言的新手,我試圖創建一個表示二進制數字的數據類型,並編寫一個函數來評估其十進制值。

我想用二進制數字表示這個BNF

Numeral ::= 0 | 1 | Numeral 0 | Numeral 1

我使用模式匹配和字段標簽在haskell中構造了它的數據類型

data Numeral = Zero | One | Num {number :: Numeral, suffex :: Int}

我創建了一個函數

    valuate Zero = 0
    valuate One  = 1
    valuate Num(n:0) = 2 * valuate (n)
    valuate Num(n:1) = 2 * valuate (n) + 1
    valuate Num(n:ns) = error "Not binary number"

但是我收到一個編譯錯誤“'valuate'的異常具有不同數量的參數”

我試圖理解我在哪里犯了錯誤,我在具有不同構造值的每個模式中都將數字傳遞給方法,甚至當我調用(2 * valuate n)時,我也傳遞了“ n”,即構造中的數字'民”

問題出在我的數據類型還是函數模式中?

您應該這樣編寫函數:

valuate Zero      = 0
valuate One       = 1
valuate (Num n 0) = 2 * valuate n
valuate (Num n 1) = 2 * valuate n + 1
valuate (Num n _) = error "Not binary number"

首先,您需要在復雜模式周圍加上括號(就像將事物作為參數傳遞給函數一樣)。 其次,您似乎在使用:將參數分隔為Num。 (:)是列表的構造函數,在這里沒有意義。

我建議您以后再編寫諸如fa而不是f(a)類的函數應用程序,因為這可以幫助您更好地了解Haskell語法中優先級的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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