【发布时间】:2023-03-14 10:18:01
【问题描述】:
这几天一直在尝试解决这个问题。例如:
k ["abc","def","ghi"] = ["bcd","efg","hia"]
k ["once","upon","a","time"] = ["nceu","pona","t","imeo"]
我正在尝试使用递归创建一个函数,而另一个则不这样做。这是我得到的最接近的:\
k [] = []
k [[]] =[[]]
k [_:_] = [_:_]
k (x:xs:xss) = ([i x xs] ++ [i xs (last (x:xs:xss))] ++ [i (last (x:xs:xss)) x ]) : k [x]
> k ["once","upon","a","time"]
[["nceu","pont","imeo"]]
任何提示表示赞赏:)
编辑:忘记包含之前创建的函数
i :: [a] -> [a] -> [a]
i [] y = y
i x [] = x
i x y = tail x ++ [head y]
【问题讨论】:
-
你能写一个更简单的函数来旋转单个元素
rotate :: [a] -> [a],例如rotate "abcd" = "bcda"和rotate "once upon a time" = "nce upon a timeo"吗?有多种方法可以将其用作组件,以使手头的任务更容易。在坐下来编写代码之前,您可能还想考虑一下您希望k ["abc", "", "def"]产生什么——应该是["bcd", "", "efa"],还是["bc", "d", "efa"],还是什么? -
讨论了同样的问题here。
标签: haskell