繁体   English   中英

Haskell Num问题实例

[英]Haskell Instance of Num issue

此代码有什么问题?

rectangle :: Int -> Int -> String
rectangle i j
    | i < 0 || j < 0    = ""
    | otherwise         = concatenate(i) ++ "n/" ++ (rectangle i) j-1




concatenate :: Int -> String
concatenate i
    | i <= 0            = ""
    | otherwise         = "*" ++ concatenate(i-1)

这是我得到的错误

  ERROR line 3 - Instance of Num [Char] required for definition of rectangle

这应该是它所做的(例如)

Main> putStr (rectangle 3 4)
****
****
****

您迟早会习惯于Haskell语法。 这里

(rectangle i) j-1

被解析为

(rectangle i j) - 1

但是你真的想要:

rectangle i (j-1)

此代码应该起作用。

rectangle :: Int -> Int -> String
rectangle i j
    | i < 0 || j < 0    = ""
    | otherwise         = concatenate i ++ "\n" ++ rectangle i (j-1)




concatenate :: Int -> String
concatenate i
    | i <= 0            = ""
    | otherwise         = "*" ++ concatenate (i-1)

对此的评论很少:

concatenate(i) ==> concatenate i
-- You don't need to put parameters in brackets in haskell.
(rectangle i) j-1 ==> rectangle i (j-1)
-- See Ingo's explanation
"n/" ==> "\n"
-- That should be obvious

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM