好的,我会尽力提供所需的所有信息。这是我们必须在课堂上实现的许多功能的一个功能,以解决河内塔。有问题的功能包括3个塔,反向顺序(最大>最小),我的问题中的光盘数量,以及从塔的水平开始为空的字符串已被添加到列表中。
该功能需要递归地逐步遍历塔的每个级别,并在单个字符串中打印该级别的光盘。希望这是有道理的。如果需要,我可以详细说明。
这是我到目前为止所拥有的:
stringFromBoardHelper :: Tower -> Tower -> Tower -> Int -> [String] -> [String]
stringFromBoardHelper _ _ _ _ [] = []
stringFromBoardHelper (t1:t1s) (t2:t2s) (t3:t3s) n discString = if n > 0
then stringFromBoardHelper t1s t2s t3s (n-1) ((stringFromThreeDiscs t1 t2 t3 n) : discString)
else discString
我的问题是,现在我的代码只返回空列表,因为我的函数以空列表开头。
但是,如果我删除空的listt案例,那么我会因为没有详尽的案例而收到错误。有什么想法吗?
答案 0 :(得分:1)
stringFromBoardHelper _ _ _ _ [] = []
只要n
为空,此行将适用于任何塔,任何discString
。
它也是定义中的第一行,因此首先尝试它。
您可能需要将该行放在最后,或者专门设置_
以使它们匹配较少的情况。
(这应解决您遇到的主要问题 - 您的代码可能会有其他问题)