Haskell 河内哈斯克尔塔
我对使用Haskell真的很陌生。我试图编写一个h4函数,它将计算用4根桩完成河内塔的最小步骤。我已经知道如何使用3个桩或h3计算它。我的主要问题是使用列表理解和返回最小值,以及使用备忘录来确保我可以快速运行代码。我忘了在运行h4函数时包含一个错误。这是说“|”有问题。我是haskell的新手,无法调试,因为我不确定问题出在哪里Haskell 河内哈斯克尔塔,haskell,list-comprehension,pseudocode,towers-of-hanoi,Haskell,List Comprehension,Pseudocode,Towers Of Hanoi,我对使用Haskell真的很陌生。我试图编写一个h4函数,它将计算用4根桩完成河内塔的最小步骤。我已经知道如何使用3个桩或h3计算它。我的主要问题是使用列表理解和返回最小值,以及使用备忘录来确保我可以快速运行代码。我忘了在运行h4函数时包含一个错误。这是说“|”有问题。我是haskell的新手,无法调试,因为我不确定问题出在哪里 --h3 function h3 0 = 0 h3 n = 2 * h3 (n - 1) + 1 h4 :: Int -> Integer
--h3 function
h3 0 = 0
h3 n = 2 * h3 (n - 1) + 1
h4 :: Int -> Integer --h4 function
h4 0 = 0
h4 n = minimum [2 * h4 (k) + h3 (n - k) | k <- [0..n-1] ]
main :: IO ()
main = print $ h4 4
--memoized h4
memoized_h4 :: Int -> Integer
memoized_h4 = (map 1H4 [0..] !!)
where 1H4 0 = 0
1H4 n = memoized_h4 h3 (n - k) | k <- [0..n-1] + memoized_h4 (2 * h4 (k) )
以下是我的情况:我的h3功能运行良好。我需要帮助,主要是我的h4
h3 :: Int -> Integer
h3 0 = 0
h3 n = 2 * h3 (n - 1) + 1
h4 :: Int -> Integer
h4 0 = 0
h4 n = 2 * h4 (k) + h3 (n - k) | k <- [0..n-1]
h4 n = minimum [2 * h4 (k) + h3 (n - k) | k <- [0..n-1] ]
--h3 function
h3 0 = 0
h3 n = 2 * h3 (n - 1) + 1
h4 :: Int -> Integer --h4 function
h4 0 = 0
h4 n = minimum [2 * h4 (k) + h3 (n - k) | k <- [0..n-1] ]
main :: IO ()
main = print $ h4 4
--memoized h4
memoized_h4 :: Int -> Integer
memoized_h4 = (map 1H4 [0..] !!)
where 1H4 0 = 0
1H4 n = memoized_h4 h3 (n - k) | k <- [0..n-1] + memoized_h4 (2 * h4 (k) )
h3::Int->Integer
H30=0
h3n=2*h3(n-1)+1
h4::Int->Integer
H40=0
h4n=2*h4(k)+h3(n-k)| k至于你的语法错误,这是你的代码,重新排列:
--h3 function
h3 0 = 0
h3 n = 2 * h3 (n - 1) + 1
h4 :: Int -> Integer --h4 function
h4 0 = 0
h4 n = minimum [2 * h4 (k) + h3 (n - k) | k <- [0..n-1] ]
main :: IO ()
main = print $ h4 4
--memoized h4
memoized_h4 :: Int -> Integer
memoized_h4 = (map 1H4 [0..] !!)
where 1H4 0 = 0
1H4 n = memoized_h4 h3 (n - k) | k <- [0..n-1] + memoized_h4 (2 * h4 (k) )
h4 :: Int -> Integer
h4 0 = 0
h4 n = 2 * h4 (k) + h3 (n - k) | k <- [0..n-1]
h4 n = minimum [2 * h4 (k) + h3 (n - k) | k <- [0..n-1] ]
h4::Int->Integer
H40=0
h4n=2*h4(k)+h3(n-k)| k为3个或4个磁盘中的每个磁盘编写代码可以,但是您能将其推广到“n”个磁盘吗?我很肯定有人已经解决了这个问题。你也可以。如果您仍然被卡住,请检查是否得到了它,但我的主要问题是,我在运行h4函数时遇到了一个错误。我是haskell的新手,不知道如何修复它。错误与“|”有关。好的,您必须理解haskell本质上是声明性的。它不会按照Java或C等语句的顺序执行。因为您已经在为n
计算它,请注释掉h4
中的第三行。这里有一个例子,如果你需要任何帮助来理解我的意思。作为旁注,我相信四桩或更多桩的最佳解决方案实际上仍然是完全未知的。另见。