Before v0.2, when evaluating a list (op arg1 arg2 ...), the op
operator had to be an atom. As of v0.2, it can now be a list. Note
that in this case, the arguments arg1 arg2 ... are ignored.
Briefly, ((c SEXP ARGS)) is equivalent to (e SEXP ARGS). The
e operator is deprecated, and you should stop using it, and
start using the new form instead. In v0.3, the e operator will
be removed.
To make this easier, if the environment variable CLVM_DISALLOW_E_OP
is set, whenever a use of the e operator is encountered, an exception will
be raised
If CLVM_DISALLOW_E_OP is set to the special value breakpoint,
the python debugger will be launched via breakpoint(), newly
introduced in Python 3.7.
$ brun '(e (q (+ (q 500))) (q ()))'
500
$ CLVM_DISALLOW_E_OP=1 brun '(e (q (+ (q 500))) (q ()))'
FAIL: e operator no longer supported (e (q (+ (q 500))) (q ()))
$ CLVM_DISALLOW_E_OP=breakpoint brun '(e (q (+ (q 500))) (q ()))'
(e (q (+ (q 500))) (q ()))
> /Users/kiss/projects/chia/clvm/make_eval.py(46)eval_core()
-> raise EvalError("e operator no longer supported", form)
$ CLVM_DISALLOW_E_OP=breakpoint brun '((c (q (+ (q 500))) (q ())))'
500For more information on environment variables, take a look at this article (or hit the internet).
In v0.1, the () null value was represented by a unique atom that was
different from every other atom. In v0.2 and beyond, the () value
is represented by an empty binary string, and so has the same representation
as 0. This also affects i, which now views 0 as false.
$ brun '(q 0)'
0
$ brun '(q ())'
()
$ brun '(i (q ()) (q 500) (q 600))'
600
$ brun '(i (q 0) (q 500) (q 600))'
500
$ brun '(i (q 1) (q 500) (q 600))'
500$ brun '(q 0)'
()
$ brun '(q ())'
()
$ brun '(i (q ()) (q 500) (q 600))'
600
$ brun '(i (q 0) (q 500) (q 600))'
600
$ brun '(i (q 1) (q 500) (q 600))'
500Initial release.