new vector is returned with the elements added to the end of the
given vector.
* `string?`: returns true if the parameter is a string.
+ * `number?`: returns true if the parameter is a number.
+ * `fn?`: returns true if the parameter is a function (internal or
+ user-defined).
+ * `macro?`: returns true if the parameter is a macro.
* `seq`: takes a list, vector, string, or nil. If an empty list,
empty vector, or empty string ("") is passed in then nil is
returned. Otherwise, a list is returned unchanged, a vector is
'symbol?: symbol?,
'keyword: keyword,
'keyword?: keyword?,
+ 'number?: number?,
+ 'fn?: fn?,
+ 'macro?: macro?,
'pr-str: (a) -> a.map(|s| pr_str(e,true)).join(" ")),
'str: (a) -> a.map(|s| pr_str(e,false)).join("")),
(get @e "bar")
;=>(1 2 3)
+;; ------------------------------------------------------------------
+;; TODO move these to optional functionality after adding them to all
+;; implementations
+;;
+;; Testing string? function
+(number? 123)
+;=>true
+(number? -1)
+;=>true
+(number? nil)
+;=>false
+(number? false)
+;=>false
+(number? "123")
+;=>false
+
+;; Testing fn? function
+(fn? +)
+;=>true
+(fn? not)
+;=>true
+(fn? cond)
+;=>false
+(fn? "+")
+;=>false
+(fn? :+)
+;=>false
+
+;; Testing macro? function
+(macro? cond)
+;=>true
+(macro? +)
+;=>false
+(macro? not)
+;=>false
+(macro? "+")
+;=>false
+(macro? :+)
+;=>false
+
+;; ------------------------------------------------------------------
;>>> soft=True
;>>> optional=True