Миранда в то время как и для петли - PullRequest
4 голосов
/ 08 октября 2011

Я ищу способ делать пока-циклы или циклы for в Миранде.

Я пытаюсь сделать что-то вроде

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

Ответы [ 3 ]

3 голосов
/ 08 октября 2011

У Миранды нет циклов while или for (что в любом случае не имело бы смысла без изменяемого состояния). В большинстве случаев вы можете использовать функции более высокого порядка. В тех случаях, когда нет функции высшего порядка, которая делает то, что вам нужно, вы можете использовать рекурсию.

Например, если у вас есть следующий цикл while на императивном языке:

f(start) {
    x = start
    while( !finished(x) ) {
        x = next(x)  
    }
    return x
}

Вы бы выразили это рекурсивно в Миранде так:

f x = if finished x then x else f (next x)
2 голосов
/ 08 октября 2011

Как и многие другие функциональные языки, у Miranda нет циклов for или while.Вместо этого вы пишете циклы, используя рекурсию, списки или функции высшего порядка .

2 голосов
/ 08 октября 2011

В Miranda (и вообще в чисто функциональных языках программирования) использование циклических конструкций, таких как WHILE, FOR и т. Д., Не рекомендуется.Ожидается, что вы будете выполнять итерацию с помощью рекурсии.

...