Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 河内哈斯克尔塔_Haskell_List Comprehension_Pseudocode_Towers Of Hanoi - Fatal编程技术网

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

我对使用Haskell真的很陌生。我试图编写一个h4函数,它将计算用4根桩完成河内塔的最小步骤。我已经知道如何使用3个桩或h3计算它。我的主要问题是使用列表理解和返回最小值,以及使用备忘录来确保我可以快速运行代码。我忘了在运行h4函数时包含一个错误。这是说“|”有问题。我是haskell的新手,无法调试,因为我不确定问题出在哪里

--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
中的第三行。这里有一个例子,如果你需要任何帮助来理解我的意思。作为旁注,我相信四桩或更多桩的最佳解决方案实际上仍然是完全未知的。另见。