"=" is always used for assignment, never for comparison. The only built-in equality function is "is", and "iso" is defined using "is".
---
"Also I get your use of 'else, but not exactly sure how it passes."
Like most Lisps, Arc has a datatype called "symbol", which is roughly equivalent to an "identifier" in other languages. Normally, if you use "else" it will refer to the variable "else", but if you use quote, it will be the symbol "else":
else ; variable
'else ; symbol
The rule for booleans in Arc is that the symbol "nil" is false, and everything else is true. The symbol "else" is not equal to the symbol "nil", therefore it is true.
The reason why akkartik used "else" is a personal style difference. It's idiomatic to just leave it off:
(if 1 ; if
2 ; then
3 ; if
4 ; then
5) ; else
---
"Now, if I understood well, there are two major forks, one you are working on, that would be wart, and anarki (mistaken already?)."
wart isn't a fork of Arc, it's a different language which has some similarities with Arc.
In particular, anarki is a true fork of Arc, which has diverged a lot, so don't expect much compatibility with existing Arc programs. But if you want all kinds of new features, I'd recommend it. I haven't used it myself though, so that's about all I can say about it.
Arc/Nu[1] is a fork of Arc I created, which should be mostly compatible with Arc 3.1, but cleans up the compiler and adds in a few new things. Naturally I recommend using this if you want something similar to Arc 3.1.
Then there's various other implementations of Arc, such as jarc and Rainbow, and an incomplete C implementation of Arc called Arcueid.
Yeah, it's problematic how to indent the "5". The above way makes it look like a test rather than an action, and indenting it further makes it seem like part of the same block as 4.
You can tell that there's no idiomatic way to deal with this because the arc/HN codebase is schizophrenic, using both in different places.