Functional programming Miranda while和for循环

Functional programming Miranda while和for循环,functional-programming,miranda,Functional Programming,Miranda,我正在寻找一种在Miranda中执行while循环或for循环的方法 我正试着做类似的事情 while(blablanotfinished) { if(a=true)blabla else blabla } 在Miranda中(通常,在纯函数式编程语言中),不鼓励使用WHILE、FOR等循环结构。您需要通过递归进行迭代。与许多其他函数式语言一样,Miranda没有for或while循环。相反,您可以使用递归编写循环,或者。Miranda没有while-or-for循环(如果没有可变状态,这就没

我正在寻找一种在Miranda中执行while循环或for循环的方法

我正试着做类似的事情

while(blablanotfinished)
{
if(a=true)blabla
else blabla
}

在Miranda中(通常,在纯函数式编程语言中),不鼓励使用WHILE、FOR等循环结构。您需要通过递归进行迭代。

与许多其他函数式语言一样,Miranda没有for或while循环。相反,您可以使用递归编写循环,或者。

Miranda没有while-or-for循环(如果没有可变状态,这就没有多大意义)。在大多数情况下,您可以使用高阶函数。在没有高阶函数满足需要的情况下,可以使用递归

例如,如果在命令式语言中有以下while循环:

f(start) {
    x = start
    while( !finished(x) ) {
        x = next(x)  
    }
    return x
}
你可以用Miranda递归地表达如下:

f x = if finished x then x else f (next x)

函数式编程风格中的while/repeat/for循环如下所示:

f x = if finished x then x else f (next x)


示例:将数字添加到其背面,直到它成为回文。 提示:起始值196导致非常大的数字


我希望,还有人对戈弗/米兰达/哈斯克尔感兴趣

安玛丽·佩森(德国)

isPalindrome :: num -> bool
isPalindrome n = (str = reverse str) where str = shownum n

addPalindrome :: num -> num
addPalindrome n = n + rev where rev = (numval.reverse.shownum) n

test196 :: num -> num
test196 n = while ((~).isPalindrome) addPalindrome n

test = test196 89