/ Imprimindo valor intermediário na função recursiva em Haskell - haskell, recursão

Imprimindo valor intermediário na função recursiva em Haskell - haskell, recursão

Eu sou novo em Haskel e quero aprender. Eu quero imprimir valor intermediário na função recursiva no haskell, mas eu estou preso em erro de análise na entrada "=" na linha b = b + 50.

`main" t s a b c
| t > s    = 0
| otherwise = do
print a
print b
print c
b = b + 50
c = b + 2 * a
main" (t+1) s (a+1) b c `

o equivalente C para este código é

 int calculate(t,s,a,b,c)
{
printf( "%d,%d,%d",a,b,c);
if(t > s)
return 0;
else
{
b = b + 50;
c = b + 2 * a;
return calculate (t+1,s,a,b,c);
}

}
int main()
{
calculate(0,10,2,6,7);
return 0;
}`

Por favor me ajude a resolver esse problema. Não é tão difícil de fazer em C, mas não consegui descobrir como fazê-lo em Haskel.

Respostas:

2 para resposta № 1

Como PyRulez diz em seu comentário, você precisa usar let sintaxe em blocos do. No entanto, você também vai encontrar problemas porque seus parâmetros de função, como todos os valores no Haskell, são imutáveis. Você precisará fazer algo como:

let b" = b + 5
let c" = b" + 2 * a

2 para resposta № 2

Se você quiser apenas imprimir algum valor intermediário, você não precisa ter sua função no mundo de IO: você pode usar o módulo Debug.Trace:

import Debug.Trace

func :: Int -> Int -> Int -> Int -> Int
func 0 _ _ _ = 0
func t a b c = trace ("a="++(show a)++" b="++(show b)++" c="++(show c)) $ recurs
where recurs = func (t-1) (a+1) (b+50) (b+2*a)

isso me dá:

> func 5 1 1 1
a=1 b=1 c=1
a=2 b=51 c=3
a=3 b=101 c=55
a=4 b=151 c=107
a=5 b=201 c=159