如何有效地两次使用这个计算的结果?

我对 Haskell 比较陌生,目前正在做我的第一个项目。我写了一个函数,它根据对另一个函数的调用返回一些东西,它再次调用这个函数(所以它是递归的)。

function :: a -> a
function a
  | null (recursive call) = a
  | otherwise = head (same recursive call)

如何只进行一次递归调用并使用两次结果(作为条件和“返回值”的一部分)?

回答

function a
  | null recCall  = a
  | otherwise     = head recCall
 where recCall = recursive call

但这不是一个好方法。避免使用head, tail, !!。通常有一种叫做“布尔盲点”的东西:使用布尔值意味着程序基本上忘记了你的逻辑所基于的含义,这意味着你需要重新引入它,这会使你的程序变得更加冗长和不可靠。

最好立即对递归结果使用模式匹配

function a = case recursive call of
   [] -> a
   (h:_) -> h

这也可以用模式保护语法编写

function a
  | (h:_) <- recursive call  = h
  | otherwise                = a


以上是如何有效地两次使用这个计算的结果?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>