在实现算法时,经常会发生这样的情况:您在 while 循环的每次迭代中检查某个变量是否小于某个阈值。
在命令式语言中,它看起来像:
while ( x < TRESHOLD ) {
x = usefullStuff();
}
当然有用的东西正在以某种方式影响 x...
如何利用函数式编程范例将此构造转换为 haskell?
最佳答案
尽管我不知道你的程序是做什么的,但我有一种感觉,你会想要稍微不同地构建你的逻辑。看看论文的第 4 节 Why Functional Programming Mattes - 一些想法。它处理类似的情况,涉及使用牛顿法求方程的根。在那里,职责被划分,以便循环逻辑与逐次逼近的生成分离。
如果 usefulStuff
是一个 monad - 即具有副作用的函数,则必须使用如下内容:
whileLoop x
| x < THRESHOLD = return x
| otherwise = do x <- usefulStuff
whileLoop x
关于haskell - 在 haskell 中翻译 while ( x < SomeTreshold ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654328/