
Hello Pratima, Il 11 dicembre 2023 alle 19:24 Folsk Pratima ha scritto:
Please explain why this fails for negative numbers. By fails I mean it starts eating RAM infinitely until either me or OOM kills it. If you replace `m1` definition with the one commented out, the code will fail for positive integers as well, which is very frustrating.
I have replaced m1 definition with the commented one, and it works on my machine. f@x270:/tmp/prova$ ./prime -4 -4 is not primal because divisible by 2 How are you invoking the program? A few additional notes (run `hlint` for more)
main = getArgs >>= \argv ->
I don’t mind `>>=` but with `do` notation and `traceM/traceShowM` it is easier to debug your programs.
--m1 = -- map -- (\x -> -- if x < 0 -- then -x -- else x) -- m0
More compact: `m1 = map abs m0`
msg (x, (y0, y1)) = x ++ " is " ++ f y0 ++ " because " ++ y1
Ancillary functions like this one can go in the `where` section. Ciao —F