From 9c0db610bf77a29f8ee1f0b9278828c3b987d6d9 Mon Sep 17 00:00:00 2001 From: MadMaurice Date: Mon, 5 Apr 2021 04:04:23 +0200 Subject: [PATCH] Add range function and euler1 example --- examples/euler1.lisp | 6 ++++++ lib/Minilisp.pm | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 examples/euler1.lisp diff --git a/examples/euler1.lisp b/examples/euler1.lisp new file mode 100644 index 0000000..157e813 --- /dev/null +++ b/examples/euler1.lisp @@ -0,0 +1,6 @@ +;; (defun range (start end) +;; (if (< start end) +;; (cons start (range (+ 1 start) end)) +;; (list))) + +(write-line (reduce + (filter (lambda (x) (or (zerop (mod x 3)) (zerop (mod x 5)))) (range 1 1000)))) diff --git a/lib/Minilisp.pm b/lib/Minilisp.pm index 5f0a6ea..86b3dfd 100644 --- a/lib/Minilisp.pm +++ b/lib/Minilisp.pm @@ -278,6 +278,10 @@ my %stdctx = ( return $number; }, + 'range' => sub { + my ($start, $end) = @_; + return [ $start .. ($end-1) ]; + }, # String comparison 'string=' => sub { my ($a, $b) = @_; return to_lisp_bool($a eq $b); },