Это Question 14.Вопросы, касающиеся решения Haskell Project Euler 14
import Data.Array
import Data.List
import Data.Ord (comparing)
syrs n = a
where
-- For those who don't want to lookup array in the reference
-- the following line creates an array indexed from 1 to n
-- using the list provided. And a ! x is the syntax for a[x] in some other languages.
a = listArray (1,n) $ 0 : [1 + syr n x | x <- [2..n]] -------- 2
syr n x = if x' <= n -------- 1
then a ! x' -------- 1
else 1 + syr n x'
where
x' = if even x
then x `div` 2
else 3 * x + 1
main = print $ maximumBy (comparing snd) $ assocs $ syrs 1000000
Выше предложено решение для Project Euler Q14 on wiki.haskell.org. Алгоритм во многом тот же, что и мой (но мой работает навсегда, пока он работает в течение 2 секунд).
Вопрос:
В строке 2, она вызывает syr n x
. Предположим, что x = 3
, x' = 10
, 10 < n
, оно будет действовать с then
: a ! 10
. Но в это время a ! 10
еще не рассчитан. Как проходит программа?
Вы хотите изменить это форматирование? Я не думаю, что многие люди могут его прочитать ... – AJFarmar
@AJFarmar Как мне отформатировать форматирование? Вопросы перед кодом? – pspencil
Если бы это был действительный код haskell, это было бы неплохо, но я думаю, что смогу сделать это за вас сейчас. Я отредактирую на мгновение. – AJFarmar