I understand that the following is not a smart thing to do. Axiom should complain, but it just coredumps silently: \begin{axiom} primes:Stream Integer := generate(nextPrime, 2) smallerThan(stream, n) == [ s for s in stream  s < n ] smallerThan(primes, 100)  Axiom 3.0 Beta coredumps \end{axiom} Matthias The failure is unrelated to Tim This is likely due to stack overflow (previously reported). The construct for smallerThan requires Axiom to test EVERY element in the stream to see if s < n. There is no reason why Axiom should complain. Axiom is not designed to be able to figure out a general formula for the nth entry of the output stream for smallerThan whose signature is: axiom smallerThan: (Stream Integer, Type: Void
To do what you are trying to do, do this: axiom )clear all
Type: Stream(Integer)
axiom filterWhile(s+>s<5,
Type: Stream(Integer)
However, why should this give an error? axiom entries p The expected result would be the first 11 (default stream length) entries. And here is another problem: axiom lessThan(n)== g(s)== (s < n) print(g(3)) filterWhile(g, Type: Void
axiom lessThan(5) axiom Compiling function g with type PositiveInteger > Boolean axiom Compiling function g with type Integer > Boolean axiom Compiling function lessThan with type PositiveInteger > Stream( Integer) false
Type: Stream(Integer)
The local function g is not compiled correctly because n is not passed to it. So it compiles as false for all input. The same error occurs in the NAG version. One would then expect Axiom to go into an infinite loop if we use not(sn). But Axiom is "smart enough" to know and creates the stream even though the answer is still wrong. axiom lessTest(n)== g(s) == not(s < n) print(g 3) filterWhile(g, Type: Void
axiom lessTest(5) axiom Compiling function g with type PositiveInteger > Boolean axiom Compiling function lessTest with type PositiveInteger > Stream( Integer) true axiom Compiling function g with type Integer > Boolean
Type: Stream(Integer)
This crashes: \begin{axiom} largerThan(st,n)==[s for s in st  not(s < n)] largerThan(p,5) \end{axiom} This one below crashes, but not for the NAG version, which gives the correct answer: \begin{axiom} before(st, n)==filterWhile(s+> s < n, st) before(p,5) \end{axiom} And this also crashes (whereas it does NOT crash for NAG version, giving the correct answer).: \begin{axiom} lessThan(n)==filterWhile(s+> (s < n), p) lessThan(5) \end{axiom} William minor, since one has enough time to kill the evaluation using ctrlc It was a bug in the function macroexpandall. At that time the workaround was to compile functions via the system command)set function compile on (we did not notice it here). I just tested this workaround in an old version of Axiom (February 2005) and it cures this issue. For information, an old version of Axiom (or a recent version with the buggy macroexpandall function) compiled on gcl2.6.8pre does not crash but silently returns.
Status: open => closed
