如果我想表达类似的东西[只是一个简单的例子]:
int a = 0;
for (int x = 0; x < n; x += 1)
a = 1 - a;
我应该在哈斯克尔做什么,因为它没有变量概念?(可能是错的,参见:Haskell 有变量吗?)
有几种选择。首先,您可以用朴素递归重写问题:
loop :: Int -> Int
loop n = loop' n 0
where loop' 0 a = a
loop' n a = loop' (n - 1) (1 - a)
接下来,您可以将递归重新表述为折叠:
loop :: Int -> Int
loop n = foldr (\a _ -> 1 - a) 0 [0..n]
或者你可以使用State
模拟 for 循环:
import Control.Monad
import Control.Monad.State
loop :: Int -> Int
loop n = execState (forM_ [0..n]
(\_ -> modify (\a -> 1 - a))) 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)