【发布时间】:2013-12-25 12:13:31
【问题描述】:
这段代码有什么问题?
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)
****
****
****
【问题讨论】:
-
@Ingo 抱歉,刚刚注意到并修复了它,但是发生了同样的错误
-
没有矩形的第二个参数,你正在做
String ++ (Int -> String) -
"但是如果我把它放在提示符上,它会说不在范围'n'内。"请改用
let factor n =等。 GHCi 提示就像在一个非常大的do语句中一样(没有do)。 -
"但是在 Haskell 中,由于变量是不可变的,我将如何做某事++ 的事情?"你随身携带世界状态,包括变量。旧状态是输入的一部分,新状态是输出的一部分。您可以使用类型为
doSomething :: s -> a -> (s, b)的函数手动执行此操作,或者在状态 monad 中为您携带它,使类型为doSomethingM :: (MonadState s m) => a -> m b. -
@Rhymoid 您好,您是否可以通过电子邮件或其他方式帮助解决这些问题?这是另一个问题 - 定义一个函数 swapwords,它接受三个字符串值 w1、w2 和 s,并返回 s,字符串 s 中所有出现的字符串 w1 被字符串 w2 替换,例如非常感谢!
标签: string haskell int concatenation