我試圖運行這段代碼:
product (x:xs) = x * product xs
product [] = 1
sum [] = 0
sum (n:ns) = n sum ns
sum [2,3,6]
product [2,3,4]
并且由于某種原因,它給了我“功能中的非詳盡模式”錯誤,無論是sum和product定義。
為什么這些模式并非詳盡無遺?我已經在一個空串列和一個包含 1 個或多個元素的串列中定義了函式。它還需要什么?
我正在使用The Glorious Glasgow Haskell Compilation System, version 9.2.4,這些示例來自 Graham Hutton 的書中。自 2016 年(本書撰寫時)以來,Haskell 編譯器發生了一些變化。
uj5u.com熱心網友回復:
在 GHCi 中,您需要使用特殊命令:{并:}包含多行定義;否則,正如評論中所指出的,您的第二行只是重新定義了您在第一行中定義的(部分)函式。
Prelude> :{
Prelude| product (x:xs) = x * product xs
Prelude| product [] = 1
Prelude| :}
Prelude>
請注意,輸入 后:{,提示符會從 切換>到|,表示您正在輸入多行定義。
或者,您可以在.hs檔案中撰寫代碼,然后:load在 GHCi 中撰寫代碼。這樣做可確保考慮定義的所有行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528537.html
標籤:哈斯克尔
下一篇:運行沖突解釋器時出錯
