mirror of
https://github.com/peklaiho/madlisp.git
synced 2024-11-22 21:35:03 +00:00
print null as empty string, enable functions eval and print
This commit is contained in:
parent
b0f22a19fe
commit
69918f3300
@ -10,25 +10,16 @@ function ml_get_lisp(): array
|
||||
|
||||
$lisp = new MadLisp\Lisp($tokenizer, $reader, $eval, $printer);
|
||||
|
||||
// environment
|
||||
|
||||
// Environment
|
||||
$env = new MadLisp\Env();
|
||||
|
||||
// Register core functions
|
||||
$lisp->register($env);
|
||||
|
||||
// Register libraries
|
||||
(new MadLisp\Lib\Math())->register($env);
|
||||
(new MadLisp\Lib\Compare())->register($env);
|
||||
(new MadLisp\Lib\Types())->register($env);
|
||||
|
||||
/*
|
||||
$env->set('eval', function (...$args) use ($eval, $env) {
|
||||
$results = $eval->eval($args, $env);
|
||||
return $results[count($results) - 1];
|
||||
});
|
||||
|
||||
$env->set('print', function (...$args) use ($printer) {
|
||||
$printer->print($args);
|
||||
return null;
|
||||
});
|
||||
*/
|
||||
|
||||
return [$lisp, $env];
|
||||
}
|
||||
|
20
src/Lisp.php
20
src/Lisp.php
@ -26,4 +26,24 @@ class Lisp
|
||||
|
||||
$this->printer->print($results);
|
||||
}
|
||||
|
||||
public function register(Env $env): void
|
||||
{
|
||||
$env->set('eval', new CoreFunc('eval', 'Evaluate arguments.', 1, -1,
|
||||
function (...$args) use ($env) {
|
||||
$results = $this->eval->eval($args, $env);
|
||||
|
||||
// Return last evaluated value
|
||||
return $results[count($results) - 1];
|
||||
}
|
||||
));
|
||||
|
||||
$env->set('print', new CoreFunc('print', 'Print arguments.', 1, -1,
|
||||
function (...$args) {
|
||||
$this->printer->print($args);
|
||||
|
||||
return null;
|
||||
}
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class Printer
|
||||
} elseif ($a === false) {
|
||||
return 'false';
|
||||
} elseif ($a === null) {
|
||||
return 'null';
|
||||
return '';
|
||||
} elseif (is_string($a)) {
|
||||
return '"' . $a . '"';
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user