On January 19, 2006 5:53 AM Fabio Stumbo wrote: if-then-else: what is wrong?I am having some problem with the if-then-else syntax in the .input files. Problem 1: I refer to the axiom book which ships with the program (version 2005/09). At page 204 it says that the usual rules for piling are suspended in conditional expressions and it gives 5 different ways which should be equivalent, namely:: fricas (1) -> i := 2
Type: PositiveInteger?
fricas if i>0 then output("positive") else output("nonpositive") Type: Void
fricas if i > 0 then output("positive") else output("nonpositive") Type: Void
fricas if true then if i > 0 then output("positive") else output("nonpositive") Type: Void
fricas if true then if i > 0 then output("positive") else output("nonpositive") Type: Void
fricas if i > 0 then output("positive") else output("nonpositive") Well, I tried all of them, creating each time a blank r.input file with inside only: fricas i := 2
Type: PositiveInteger?
followed by one of the "if...". The result is that the first two are ok, where as the other three give some syntax error (different each time). fricas for i in 2..2 repeat if i>0 then output("positive") else output("nonpositive") Type: Void
fricas for i in 2..2 repeat if i > 0 then output("positive") else output("nonpositive") Type: Void
fricas for i in 2..2 repeat if i > 0 then output("positive") else output("nonpositive") Type: Void
fricas for i in 2..2 repeat if i > 0 then output("positive") else output("nonpositive") Type: Void
The ones above works OK. The following one looks like a bug... fricas for i in 2..2 repeat if i > 0 then output("positive") else output("nonpositive") fricas for i in 2..2 repeat if i > 0 then output(i) output("positive") else output(i) output("nonpositive") Type: Void
fricas i:=1.5
Type: Float
fricas a := if i > 0 then j := sin(i * pi()) exp(j + 1/j) else j := cos(i * 0.5 * pi()) log(abs(j)**5 + 1)
Type: Float
Problem 2: again with if then else, in a complex function I noticed a wrong result (the function itself was ok... ;-) Simplifying, you can produce the same error with something like: fricas test: (INT, Type: Void
fricas test(a, Type: Void
Then, fricas 4 rem -2
Type: NonNegativeInteger?
fricas test(4, fricas Compiling function test with type (Integer,
Type: List(Integer)
returns correctly '[1,1]?', but fricas 4 rem -3
Type: PositiveInteger?
fricas test(4,
Type: List(Integer)
or fricas 4 rem 2
Type: NonNegativeInteger?
fricas test(4,
Type: List(Integer)
returns wrongly '[0,1]?'. Actually the result is '[0, 0]?' which is correct. The same happens if I write fricas test: (INT, Type: Void
fricas test(a, Type: Void
Why? Another small question. Is there a way to obtain on line the syntax of a command in a more extensive way? I mean, for example, that writing fricas )di op extendedEuclidean which is not too useful. Moreover, how can I just ask about, say, the second function extendedEuclidean? If I wanted to ask about the syntax of if-then-else, I would like to write something like: )? if or )ap if but nothing gives clues on how to use it. Thank you for all your help |