* Built-in predicates for list processing and top-level declarative
control (`setup_call_control/3`, `call_with_inference_limit/3`,
etc.) (_done_).
-* A rudimentary module system (_in progress_).
+* A rudimentary module system (_done_).
* Attributed variables using the SICStus Prolog interface and
semantics. Adding coroutines like `dif/2`, `freeze/2`, etc.
is straightforward with attributed variables.
$> cargo build
```
-cargo will download and install the libraries rusty-wam uses automatically.
-rusty-wam can be run with the command `cargo run`, and likewise tests can be
-run with `cargo test`.
+cargo will download and install the libraries rusty-wam uses
+automatically. rusty-wam can be run with the command `cargo run`, and
+likewise tests can be run with `cargo test`.
Note on compatibility: rusty-wam should work on Linux, Mac OS X, and
FreeBSD. Windows support hinges on the Termion library working in
### Modules
-rusty-wam has seemingly correct but presently untested support for a
-simple predicate-based module system. It provides a way to separate
-units of code into distinct namespaces, for both predicates and
-operators. See the files `src/prolog/lib/*.pl` for examples.
+rusty-wam supports for a simple predicate-based module system. It
+provides a way to separate units of code into distinct namespaces, for
+both predicates and operators. See the files `src/prolog/lib/*.pl` for
+examples.
At the time of this writing, several control and list processing
operators and predicates are hidden in their own modules that have not
```
A qualified `use_module` can be used to remove imports from the
-toplevel by calling it with an empty import list.
+toplevel by calling it with an empty import list.
\ No newline at end of file
match read() {
Input::Line(line) => parse_and_compile_line(&mut wam, line.as_str()),
- Input::Batch(batch) => {
- compile_listing(&mut wam, batch.as_str());
- },
+ Input::Batch(batch) =>
+ match compile_listing(&mut wam, batch.as_str()) {
+ EvalSession::Error(e) => println!("{}", e),
+ _ => {}
+ },
Input::Quit => break,
Input::Clear => {
wam.clear();