簡體   English   中英

Haskell簡單顯示列表程序的元素

[英]Haskell simple show the elements of a list program

我試圖在Haskell中創建一個函數來顯示列表的元素,但是它不起作用。 我做錯了什么?

showw :: [Int a]=> [a] -> b
showw []=0
showw (x:xs)= x ++ showw xs

它給了我這個錯誤:

aplicatie.hs:1:12: error: 
• Expected a constraint, but ‘[Int a]’ has kind ‘*’ 
• In the type signature: afisare :: [Int a] => [a] -> b
aplicatie.hs:1:13: error: 
• Expecting one fewer argument to ‘Int’ Expected kind ‘* -> *’, but 
  ‘Int’ has kind ‘*’ 
• In the type signature: afisare :: [Int a] => [a] -> b

這里有一些問題。 首先,約束是用括號而不是括號寫的:

showw :: (Int a) => [a] -> b

這消除了一個錯誤。

現在我不確定您打算使用什么(Int a) ,但是Int不是類型類,因此您不能像這樣使用它。 也許您的意思是a是一個Int ,在這種情況下,我們根本不會使用類型變量,而只在其位置使用Int類型:

showw :: [Int] -> b

現在,這個b因其寂寞而浮在四周,而寂寞類型變量通常是個問題。 它說showw可以返回任何類型 ,所以如果我說,嘿, showw ,這是[1,2,3,4,5] ,還給我一塊Elephant ,它就必須返回大象。

由於您要“顯示”列表,因此我假設您要返回一個String

showw :: [Int] -> String

這是一個合理的簽名。 現在執行:

show [] = 0

要顯示一個空列表,您...給0? 那沒有道理。 您可能需要空字符串""

然后這行:

showw (x:xs) = x ++ showw xs

在其中嘗試將Intx )與Stringshoww xsshoww xs ,這是不允許的。 您需要先將x轉換為字符串,我想您應該使用常規show函數來執行此操作。

也就是說, show函數已經可以顯示列表。 但是我認為你在練習。

這里有一些問題。

第一個問題是類型簽名。 Int是一種類型,但是您的語法使其看起來像類型類。 如果您的函數需要一個Ints列表並輸出其他值,則它應如下所示:

func :: [Int] -> a

當然,僅當您打算將功能限制為Ints時,此方法才有效。 如果要包括其他類型的數字, 需要使用類型類。 例如,如果要使用Num,則類型簽名將看起來像這樣:

func :: Num a => a -> b

但是,即使您修復了類型簽名,您仍然會遇到錯誤,因為函數的返回類型不一致。 showw []返回0(一個Int),但非空列表上的showw返回值列表。 您可能希望showw []返回[0][]

並且,如果要顯示這些值(如將它們轉換為字符串一樣),則需要使用一個函數來進行轉換。 您可以將該函數應用於第三行的x以及showw []的返回值。

暫無
暫無

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

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