diff --git a/stdlib/stdlib.lisp b/stdlib/stdlib.lsp similarity index 70% rename from stdlib/stdlib.lisp rename to stdlib/stdlib.lsp index f52c40e..472fbf9 100644 --- a/stdlib/stdlib.lisp +++ b/stdlib/stdlib.lsp @@ -1,25 +1,15 @@ -; quicksort -(defun quick-sort (l) - (if (<= (len l) 1) - l - (do - (define pivot (first l)) - (+ - (quick-sort (filter (lambda (n) (> pivot n)) l)) - (list pivot) - (quick-sort (tail (filter (lambda (n) (<= pivot n)) l))) - )) - )) - -; decrement a number -(defun dec (n) (- n 1)) - -; increment a number -(defun inc (n) (+ n 1)) ; not a bool (defun not (x) (if x 0 1)) +; logical and +(defun and (a b) (if a (if b 1 0) 0)) + +; logical or +(defun or (a b) (if a 1 (if b 1 0))) + + + ; negate a number (defun neg (n) (- 0 n)) @@ -29,6 +19,14 @@ ; is a number negative? (defun is-neg? (n) (< n 0)) +; decrement a number +(defun dec (n) (- n 1)) + +; increment a number +(defun inc (n) (+ n 1)) + + + ; return second element of list (defun second (l) (index l 1)) @@ -41,6 +39,39 @@ ; return fifth element of list (defun fifth (l) (index l 4)) +; return 1 when list contains item otherwise 0 +(defun member (lst itm) + (do + ; TODO check if is empty list + (define found_index -1) + (define i 0) + (define lst_len (len lst)) + + (while (and (< i lst_len) (= found_index -1)) + (if (= itm (index lst i)) + (define found_index i) + (define i (+ i 1)) + )) + + ; TODO when nil will be implemented itm / nil + (if (!= -1 found_index) + 1 + 0) + )) + + +; quicksort +(defun quick-sort (l) + (if (<= (len l) 1) + l + (do + (define pivot (first l)) + (+ + (quick-sort (filter (lambda (n) (> pivot n)) l)) + (list pivot) + (quick-sort (tail (filter (lambda (n) (<= pivot n)) l))) + )) + )) ; from list of lists creates csv string @@ -64,6 +95,3 @@ rows_str )) - - -(defun setq (var val) (define var val)) \ No newline at end of file