type Output;
fn new() -> Self;
+ fn push_char(&mut self, char);
fn append(&mut self, &str);
fn begin_new_var(&mut self);
fn result(self) -> Self::Output;
self.contents += contents;
}
+ fn push_char(&mut self, c: char) {
+ self.contents.push(c);
+ }
+
fn begin_new_var(&mut self) {
if self.contents.len() != 0 {
self.contents += ", ";
match c {
Constant::Char(c) if c == '\n' =>
self.outputter.append("'\\n'"),
-// Constant::Char(c) if c == '\f' =>
-// self.outputter.append("\\f"),
+ // Constant::Char(c) if c == '\f' =>
+ // self.outputter.append("\\f"),
Constant::Char(c) if c == '\r' =>
self.outputter.append("'\\r'"),
Constant::Char(c) if c == '\t' =>
self.outputter.append("'\\t'"),
+ Constant::Char(c) => {
+ self.outputter.append("'");
+ self.outputter.push_char(c);
+ self.outputter.append("'");
+ },
// Constant::Char(c) if c == '\b' =>
// self.outputter.append("\\b"),
// Constant::Char(c) if c == '\\a' =>
(\==)/2, (@=<)/2, (@>=)/2, (@<)/2, (@>)/2, (=@=)/2, (\=@=)/2,
catch/3, throw/1, true/0, false/0]).
-','(G1, G2) :- '$get_cp'(B), ','(G1, G2, B).
-
-','(!, ','(G1, G2), B) :- '$set_cp'(B), ','(G1, G2, B).
-','(!, !, B) :- '$set_cp'(B).
-','(!, G, B) :- '$set_cp'(B), G.
-','(G, ','(G2, G3), B) :- !, G, ','(G2, G3, B).
-','(G, !, B) :- !, G, '$set_cp'(B).
-','(G1, G2, _) :- G1, G2.
-
% arithmetic operators.
:- op(700, xfx, is).
:- op(500, yfx, +).
% control operators.
+','(G1, G2) :- '$get_cp'(B), ','(G1, G2, B).
+
+','(!, ','(G1, G2), B) :- '$set_cp'(B), ','(G1, G2, B).
+','(!, !, B) :- '$set_cp'(B).
+','(!, G, B) :- '$set_cp'(B), G.
+','(G, ','(G2, G3), B) :- !, G, ','(G2, G3, B).
+','(G, !, B) :- !, G, '$set_cp'(B).
+','(G1, G2, _) :- G1, G2.
+
;(G1, G2) :- '$get_cp'(B), ;(G1, G2, B).
;(G1, G4, B) :- compound(G1), G1 = ->(G2, G3), (G2 -> G3 ; '$set_cp'(B), G4).
% arg.
-/* Here is the old, SWI Prolog-imitative arg/3. The new, ISO Prolog
- * compliant arg/3 is implemented in Rust.
+/* Here is the old, SWI Prolog-imitative arg/3. It has been superseded by an ISO Prolog
+ * compliant arg/3 implemented in Rust.
arg(N, Functor, Arg) :- var(N), !, functor(Functor, _, Arity), arg_(N, 1, Arity, Functor, Arg).
arg(N, Functor, Arg) :- integer(N), !, functor(Functor, _, Arity), '$get_arg'(N, Functor, Arg).