Loading Fundamental.lisp +19 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,21 @@ (eval-list body)) (eval resultform))) (defspecial doseq (formargs &rest body) "(doseq (loopvar seq resultform) . body)" (let ((var (car formargs)) (seq (eval (cadr formargs))) resultform) (let ((list (if (stringp seq) (split-string "" seq) seq))) (when (consp (cddr formargs)) (setq resultform (caddr formargs))) (while (consp list) (set var (pop list)) (eval-list body)) (eval resultform)))) (defun sequencep (object) "return t if OBJECT is a sequence (list or string), nil else" (or (listp object) (stringp object))) Loading Loading @@ -205,6 +220,10 @@ (apply #'/= (cons n (cddr args))) (apply #'/= (cdr args)))))) (defun string (&rest args) "make a string from all args and return it" (apply #'concat (mapcar #'princs args))) (defun string<= (&rest args) "return t if string args are in ascending order (non-strict), else nil" (if (or (null args) (null (cdr args))) Loading TODO +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ * Brandom * read: does not recognize missong close paren on EOF * start/end args for dolist/doseq? @ fix regtests; 024 + better argument checking (number, types) for Builtins (instead Loading regtests/notyet/025-dolist.lisp→regtests/025-dolist.lisp +0 −0 File moved. View file regtests/033-string.lisp 0 → 100644 +11 −0 Original line number Diff line number Diff line (testcmp "string of nothing" '(string) "") (testcmp "string single list" '(string '(a b c)) "(a b c)") (testcmp "string symbols" '(string 'abc 'def) "abcdef") (testcmp "string strings" '(string "a" "b") "ab") (testcmp "string mixed" '(string "a" t nil 'huhu (cons 'd '(e f)) 112) "atnilhuhu(d e f)112") Loading
Fundamental.lisp +19 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,21 @@ (eval-list body)) (eval resultform))) (defspecial doseq (formargs &rest body) "(doseq (loopvar seq resultform) . body)" (let ((var (car formargs)) (seq (eval (cadr formargs))) resultform) (let ((list (if (stringp seq) (split-string "" seq) seq))) (when (consp (cddr formargs)) (setq resultform (caddr formargs))) (while (consp list) (set var (pop list)) (eval-list body)) (eval resultform)))) (defun sequencep (object) "return t if OBJECT is a sequence (list or string), nil else" (or (listp object) (stringp object))) Loading Loading @@ -205,6 +220,10 @@ (apply #'/= (cons n (cddr args))) (apply #'/= (cdr args)))))) (defun string (&rest args) "make a string from all args and return it" (apply #'concat (mapcar #'princs args))) (defun string<= (&rest args) "return t if string args are in ascending order (non-strict), else nil" (if (or (null args) (null (cdr args))) Loading
TODO +4 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,10 @@ * Brandom * read: does not recognize missong close paren on EOF * start/end args for dolist/doseq? @ fix regtests; 024 + better argument checking (number, types) for Builtins (instead Loading
regtests/033-string.lisp 0 → 100644 +11 −0 Original line number Diff line number Diff line (testcmp "string of nothing" '(string) "") (testcmp "string single list" '(string '(a b c)) "(a b c)") (testcmp "string symbols" '(string 'abc 'def) "abcdef") (testcmp "string strings" '(string "a" "b") "ab") (testcmp "string mixed" '(string "a" t nil 'huhu (cons 'd '(e f)) 112) "atnilhuhu(d e f)112")