Haskell刷新变量值

Haskell刷新变量值,haskell,recursion,Haskell,Recursion,每次对函数进行递归时,我都要刷新一个变量值。为了简单起见,我给你举个例子 假设我们给一个函数一个数字(n),它将返回它所能得到的最大mod,而数字本身较小 {- Examples: n=5 `mod` 5 n=5 `mod` 4 n=5 `mod` 3 n=5 `mod` 2 n=5 `mod` 1 -} example :: Integer -> Integer example n | n `mod` ... > !The biggest `mo

每次对函数进行递归时,我都要刷新一个变量值。为了简单起见,我给你举个例子

假设我们给一个函数一个数字(n),它将返回它所能得到的最大mod,而数字本身较小

{- Examples:
  n=5 `mod` 5
  n=5 `mod` 4
  n=5 `mod` 3
  n=5 `mod` 2
  n=5 `mod` 1
-}

example :: Integer -> Integer
example n
    |  n `mod` ...  >  !The biggest `mod` it found so far!  && ... > 0
       = !Then the biggest `mod` so far will change its value.
    |  ... = 0 !The number we divide goes 0 then end! = 0
哪里…=递归(我认为)


我不知道怎样才能更好地描述它。如果你能帮助我,那就太好了

您可以按照说明编写:

example :: Integer -> Integer
example n = biggestRemainder (abs n) 0
    where
        biggestRemainder 0 biggestRemainderSoFar = biggestRemainderSoFar
        biggestRemainder divisor biggestRemainderSoFar = biggestRemainder (divisor - 1) newBiggestRemainder
            where
                thisRemainder = n `mod` divisor
                newBiggestRemainder = case thisRemainder > biggestRemainderSoFar of
                    True -> thisRemainder
                    False -> biggestRemainderSoFar
这个函数也可以编写得更容易

example2 :: Integer -> Integer
example2 0 = 0
example2 n = maximum $ map (n `mod`) [1..(abs n)]

将第二个参数添加到函数中,例如
example n acc=…
ahm为什么要使用True..的
大小写(thisreets>maxist..)而不是if语句?或者
max thisreets biggestremainers sofar
我讨厌if-then-else。它应该只是一个序曲函数
if::Bool->a->a->a
。至于
max
,我通常用不依赖于其他代码的代码回答问题,除非其他代码提供了一些重要信息。在这种情况下,如果用
max
替换所有的
case
,代码与问题的并行性将非常小,因此询问者将更难理解。