So this gives good opportunity to Editor makers. Compile "this" level, 1-level-up, 2-level-up and so on. In an editor you can always check your program while coding.
Example is Cider package for Emacs for Clojure programming language.
So this gives good opportunity to Editor makers. Compile "this" level, 1-level-up, 2-level-up and so on. In an editor you can always check your program while coding.
Example is Cider package for Emacs for Clojure programming language.
This is a complete Scheme program:
(cond
[(= 1 0) (error "should be unreachabe")]
(else "should always be reached"))
However this: (else "should always be reached")
Is not a Scheme program, unless the binding `else` be defined in the current scope..The Lisp syntax then is defined for these token trees.
For example the syntax for an argument list in Common Lisp is defined with an EBNF syntax description form:
lambda-list::= (var*
[&optional {var | (var [init-form [supplied-p-parameter]])}*]
[&rest var]
[&key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&allow-other-keys]]
[&aux {var | (var [init-form])}*])But, we can of course go even further than that:
(library (main constants (0 0 1))
(export pi)
(define pi 3.1415926535)
)
`(0 0 1)` is not a valid Scheme program, no matter what one define at any point; an integer can never be the operand of an expression.It's not even only about the syntax. The Python environment, as far as I understand (and please correct me if I'm wrong), does not support re-definitions very well. Some things can be re-defined, but some cannot. So that's a problem in itself which makes REPL-driven development not very useful in Python.