Scala - whileLoop

0

Mam taki przykład pętli while:

var count = 0
while (count < 5) {
println(count)
count += 1
}

Mam stworzyć funkcję whileLoop(bez używania efektów obliczeniowych), która pobiera dwa argumenty: warunek oraz wyrażenie i dokładnie symuluje działanie pętli while (również składniowo).
Jakiego typu (i dlaczego) muszą być argumenty i wynik funkcji?

Może mnie ktoś nakierować, jak takie coś zrealizować? Podejrzewam, że chodzić może o ewaluację leniwą, ale kompletnie nie wiem, jak mam przekazać np. w wyrażeniu "count+=1", po czym wywołać to i sprawdzać w warunku w funkcji.

1

Możesz zrobić to rekurencyjnie, wywołując funkcję z argumentami: counter: Int, predicate: Int => Boolean i zwracać w tym przypadku Unit. Przy kolejnych wywolaniach sprawdzasz predicate i wywolujesz jeszcze raz z counter+1 lub kończysz działanie. Można wykorzystać rekurencje ogonowa (@tailrec), aby zapewnić stack safety - kompilator zmieni to w zwykłą pętle i nie będą tworzone kolejne ramki stosu

0

Czyżby Paradygmaty Programowania profesora Spławskiego? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0