The addition of )math
below stopped the infinite loop from occurring!
For the version without )math
, see SandBox Trace in Windows :
\begin{axiom}
)trace INT
)trace EXPR INT )math -- added, I thought, to surpress output, but expecting same error
)trace SMP
1::EXPR INT
\end{axiom}
Actually, if FriCAS this specific example should work regardless of )math
.
In the past )math
caused trouble because )math
uses coercion to
OutputForm
and this coercion sometimes was traced causing infinite
recursion. There was similar problem without 'math': FriCAS before
first use of a routine must first search its internal tables. To make
subsequent uses faster FriCAS stores inside domains a search function.
At first use this function performs search, replaces entry in domain
vector and calls proper function. Subsequent calls go directly to
proper function. Tracing replaces functions stored in domain by
wrappers that print argument and call proper functions. Resulting
indirection is confusing and in the past FriCAS code was wrong which
could lead to wrapper infinitely calling itself. Both problems
are fixed in current FriCAS.
Currently using )math
typically works better because of types.
Basically, anything containing types, will cause trouble when tracing without
)math
. Namely, types usually have many fields, one field contains lists
of operations which may be quite long. Worse yet, typical types contain
several other types. So printing type means printing huge, deeply nested
data structure which leads to unreadable result. During printing this
looks like an infinite loop, but given enough time and memory it will
eventually finish. Now, Spad functions contain a type (namely domain in
which they are defined). So anything containing functions (which happens
frequently) also contains a type.