oxide_lisp 0.7.0

A simple lisp interpreter engine in Rust
Documentation
(defun greet (callback)
  (set extra_message "\nWelcome to oxide-lisp!\n")
  (callback "John")
  )

(greet (lambda (name)
	 (println (str::concat "Hello" " " name "!!" extra_message))))

(set pretty-print (lambda (@rest)
		    (println (str::join (map (lambda (x) (json::stringify x)) @rest) " "))
		    ))

(pretty-print
 (filter
  (lambda (num) (%? num 2))
  (@:: 1 2 3 4 5)
  ))

(pretty-print
 (reduce
  (lambda (acc item key)
    (#::> acc key (* item 1000)))
  (#::
   "jack" 28
   "john" 28
   "eve"  35
   )
  (#::)
  ))

(pretty-print (reverse (@:: 1 2 3 4)))

(set req (#::
	  "request" (#::
		     "headers" (#::
				"cookie" "at=10328yrji90o"
				"content-type" "application/json"
				"host" "example.com"
				)
		     "ip" (@:: 10 0 0 12)
		     )
	  ))

(for-each
 (lambda (key val)
   (println " `-- " key val)
   )
 (#::<<
  req
  (str::split "request.headers" ".")
  ))

(defun call-variadic (data @rest)
  (println "data: " data "name opt: " (assoc-opt @rest :name))
  )
(call-variadic 1 :new-line true :space true :name :Peter)

(println (str::join (map (lambda (i) (to-string i)) (:ip (:request req))) :.))

(defun log (@rest)
  (let
      (
       (level (assoc-opt @rest :level "INFO"))
       (msg (assoc-opt @rest :msg))
       (err (assoc-opt @rest :err))
       )
    (println (str::join (@:: "level=" level (if err (str::concat " err=" err) "") " msg=" (json::stringify msg))))
    )
  )

(log :msg "Sample log")