尝试创建一个包含两个列表的函数,第一个是字符列表,第二个是正整数。然后,该函数重复第一个列表中的字符,即第二个列表中相同位置编号的次数。例如:
mess.hs:10:43: error:
* Couldn't match expected type `Bool' with actual type `[Char]'
* In the second argument of `(&&)', namely `myCount xs ys'
In the expression: replicate y x && myCount xs ys
In an equation for `myCount':
myCount (x : xs) (y : ys) = replicate y x && myCount xs ys
到目前为止我所拥有的:
CREATE TABLE
我正在复制第一个列表中的字符(x)y次,然后递归地为整个列表执行此操作。 任何正确方向的帮助或指示都会很棒!
我的错误是:
sql = """create table Product
(ProductID integer,
Name text,
Price real,
primary key(ProductID))"""
答案 0 :(得分:3)
您是如何想出使用&&
的?这是一个逻辑运算符,即只有当双方都为真时,它才会将两个真值(Bool
)组合成True
的值。
你正在处理的不是布尔值而是列表。您希望将两个列表组合到以第一个开头并继续另一个的列表中。 IOW,你想要一个类型为[Char] -> [Char] -> [Char]
的函数。实际上列表元素是Char
s并不重要,这应该适用于包含任何类型的列表:[a] -> [a] -> [a]
。好吧,你可以hoogle that! first result是
(++) :: [a] -> [a] -> [a] infixr 5
Append two lists, i.e.,
[x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn]
[x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...]
If the first list is not finite, the result is the first list.
听起来不错,不是吗?所以,这是你要写的功能:
replicates :: [Int] -> [a] -> [a]
replicates (n:ns) (x:xs) = replicate n x ++ replicates ns xs
replicates _ _ = []
或者,您可以将其定义为
replicates ns = concat . zipWith replicate ns