3

ミランダでwhileループまたはforループを実行する方法を探しています。

私は次のようなことをしようとしています

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

4 に答える 4

3

Mirandaには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)
于 2011-10-08T16:05:41.827 に答える
1

ミランダ(および一般に、純粋に関数型プログラミング言語)では、WHILE、FORなどのようなループ構造の使用は推奨されていません。再帰を介して反復を行うことが期待されています。

于 2011-10-08T15:56:00.547 に答える
1

他の多くの関数型言語と同様に、Mirandaにはforループまたはwhileループがありません。代わりに、再帰、リスト内包表記、または高階関数を使用してループを記述します。

于 2011-10-08T16:00:18.997 に答える
1

関数型プログラミングスタイルのwhile/repeat/for-loopsは次のようになります。


while :: (*->bool) -> (*->*) -> * -> *
while p ff state
  = state                , if ~ (p state)
  = while p ff (ff state), otherwise

サンプル:回文になるまで、その逆に数字を追加します。ヒント:開始値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

誰かがまだGofer/Miranda/Haskellに興味を持っていることを願っています。

Annemarie Paysen(ドイツ)

于 2021-01-01T21:32:20.297 に答える