Hi,
> The current BOOT code is, for the most part, able to be rewritten in
> a language called Icon (or its descendant Unicon).
Well, replacing one unfamiliar language by another isn't something we
are currently looking for. Of course, since everything is open-source
and you have time to spare, you can go in any direction you like and see
how far you get. However, although I personally do not like programming
in LISP or BOOT, I see the value (at least of LISP) and replacing it by
a different language or even computing model would take quite a while
and would probably not help much in attracting more people to FriCAS.
> Icon and Unicon do not have Booleans anywhere in the language.
> Booleans have been replaced with Success (provide a value) or Failure
> (stop the computation).
> If you are testing to see if a value is inside a range, you can do
> the following
>
> if 5 < x < 100 then { do something } else { do something if it is
> not }
There is a sister-project to FriCAS (called Aldor) which aims at
replacing the SPAD compiler by a non-lispy implementation. Rather than
extending the SPAD language in many directions it rather reduced it so
that quite a number of things can be done through library code instead
of being language-defined.
See
https://github.com/aldorlang/aldor and
http://www.aldor.org/docs/aldorug.pdf .
Here is a little piece of code that I have found in the BasicMath
library (unfortunately not commonly available) that *defines* the
"a < x < b" syntax.
BX ==> Cross(Boolean, X);
+++ `BMOrderSyntaxPackage' provides the functions that enable
+++ expressions like `1 < x < 10' (meaning `1 < x and x < 10')
++ to work correctly.
OrderSyntaxPackage(X: OrderedSetCategory): with {
<: (X, X) -> BX;
<=: (X, X) -> BX;
<: (BX, X) -> BX;
<=: (BX, X) -> BX;
<: (BX, X) -> Boolean;
<=: (BX, X) -> Boolean;
} == add {
(x: X) < (y: X): BX == (x < y, y);
(x: X) <= (y: X): BX == (x <= y, y);
(bx: BX) < (y: X): BX == {(b,x):=bx; (b and x < y, y)}
(bx: BX) <= (y: X): BX == {(b,x):=bx; (b and x <= y, y)}
(bx: BX) < (y: X): Boolean == {(b,x):=bx; b and x < y}
(bx: BX) <= (y: X): Boolean == {(b,x):=bx; b and x <= y}
}
With that in the library one can then use
import from OrderSyntaxPackage(Integer);
s: String := if 2 < x <= y <= 10 then "A" else "B"
in order to assign either "A" or "B" to s depending on whether
or not 2 < x <= y <= 10 holds.
I would be much more happy to combine FriCAS with Aldor (and perhaps
replace the Lisp and Boot part by what Aldor provides).
However, also that is not soo easy, since it would mean to replace the
FriCAS code that deals with an interactive session by a completely new
system based on Aldor. Certainly doable, but obviously very
time-consuming. And whether the result is something that is better than
the current system based on LISP is yet to be proved.
> There is much of the SPAD library files that can be directly
> translated in Icon.
That is certainly not a goal. SPAD and even more Aldor (see Aldor User
Guide) are lanugages that are developed with a mathematical/symbolic
mindset.
All the best
Ralf