我有一个[[a]]类型,例如它看起来像:
[[1,2,3],[1,2],[1],[]]
Run Code Online (Sandbox Code Playgroud)
但我想在Haskell中创建一个函数,它将使它看起来像:
[[],[1],[1,2],[1,2,3]]
Run Code Online (Sandbox Code Playgroud)
我开始使用此函数,但它不适用于包含列表的列表:
myreverse ::[Integer] -> [Integer]
myreverse [] = []
myreverse (h:t)= myappend (myreverse t) [h]
Run Code Online (Sandbox Code Playgroud)
(myappend是我的本地函数,它附加了列表)
那么我需要在代码中进行哪些更改才能使其与包含其他列表的列表一起使用?
我试图在我的Haskell函数中执行一些语句,我在线查看并得到了如果我使用"do"可能会这样做的想法.我可以使用它.但是它仍然不适用于我,如果有人可以请一看,并指导我做错了什么,我刚开始使用haskell,所以它与Haskell语法有点挣扎.
我的功能:
type Rod = String
Move = (Integer, Rod, Rod)
hanoi :: Integer -> Rod -> Rod -> Rod -> [Move]
hanoi n source helper destination= if n==1 then [(n source destination)] else do
(hanoi (n-1) source helper destination)
([n source destination])
(hanoi (n-1) helper destination source)
Run Code Online (Sandbox Code Playgroud)
我正在努力做河内塔问题.我想执行"do"之后的三个陈述.任何帮助将受到高度赞赏.
提前致谢!!!
此问题与我之前的问题有关,如果谓词成立,则从列表中删除项目.
我正在努力输出一个不包含三个任意倍数的无限列表.为此,我现在有这几个功能:
delete :: Eq a => a -> [a] -> [a]
delete deleted xs = [ x | x <- xs, x /= deleted ]
removeif ::(a -> Bool)->[a]->[a]
removeif func [] = []
removeif func (h:t)= if func h then delete h (h:t) else removeif func t
nothreefolds :: [Integer]
nothreefolds = removeif (x `mod` 3 == 0) [1..]
Run Code Online (Sandbox Code Playgroud)
但问题是我缺少一些语法知识,我想告诉removeif他们从自然数中删除元素,如果它们是3的倍数.
如果你能帮助我找到正确的方向,我将非常感激.