Add vector primitive specs to spec/primitives.sx

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-04 23:03:07 +00:00
parent 6fe3476e18
commit e84f5cc1f5

View File

@@ -168,6 +168,69 @@
:returns "number"
:doc "Convert inexact to nearest exact integer.")
(define-primitive
"make-vector"
:params ((n :as number))
:returns "vector"
:doc "Create vector of size n, optionally filled.")
(define-primitive
"vector"
:params ()
:returns "vector"
:doc "Create vector from arguments.")
(define-primitive
"vector?"
:params ((x :as any))
:returns "boolean"
:doc "True if x is a vector.")
(define-primitive
"vector-length"
:params ((v :as vector))
:returns "number"
:doc "Number of elements.")
(define-primitive
"vector-ref"
:params ((v :as vector) (i :as number))
:returns "any"
:doc "Element at index.")
(define-primitive
"vector-set!"
:params ((v :as vector) (i :as number) (val :as any))
:returns "nil"
:doc "Set element at index.")
(define-primitive
"vector->list"
:params ((v :as vector))
:returns "list"
:doc "Convert vector to list.")
(define-primitive
"list->vector"
:params ((l :as list))
:returns "vector"
:doc "Convert list to vector.")
;; --------------------------------------------------------------------------
;; Core — Predicates
;; --------------------------------------------------------------------------
(define-primitive
"vector-fill!"
:params ((v :as vector) (val :as any))
:returns "nil"
:doc "Fill all elements.")
(define-primitive
"vector-copy"
:params ((v :as vector))
:returns "vector"
:doc "Independent shallow copy.")
(define-primitive
"min"
:params (&rest (args :as number))
@@ -216,9 +279,6 @@
:doc "Inequality."
:body (not (= a b)))
;; --------------------------------------------------------------------------
;; Core — Predicates
;; --------------------------------------------------------------------------
(define-primitive
"eq?"
:params (a b)
@@ -239,6 +299,9 @@
:doc "Deep structural equality. Recursively compares collections."
:body (= a b))
;; --------------------------------------------------------------------------
;; Core — Logic
;; --------------------------------------------------------------------------
(define-primitive
"<"
:params ((a :as number) (b :as number))
@@ -251,6 +314,9 @@
:returns "boolean"
:doc "Greater than.")
;; --------------------------------------------------------------------------
;; Core — Strings
;; --------------------------------------------------------------------------
(define-primitive
"<="
:params ((a :as number) (b :as number))
@@ -302,9 +368,6 @@
:doc "True if x is a boolean (true or false)."
:body (= (type-of x) "boolean"))
;; --------------------------------------------------------------------------
;; Core — Logic
;; --------------------------------------------------------------------------
(define-primitive
"number?"
:params (x)
@@ -319,9 +382,6 @@
:doc "True if x is a string."
:body (= (type-of x) "string"))
;; --------------------------------------------------------------------------
;; Core — Strings
;; --------------------------------------------------------------------------
(define-primitive
"list?"
:params (x)
@@ -373,6 +433,9 @@
:returns "string"
:doc "Concatenate all args as strings. nil → empty string, bool → true/false.")
;; --------------------------------------------------------------------------
;; Core — Collections
;; --------------------------------------------------------------------------
(define-primitive
"concat"
:params (&rest (colls :as list))
@@ -433,9 +496,6 @@
:returns "string"
:doc "Strip leading/trailing whitespace.")
;; --------------------------------------------------------------------------
;; Core — Collections
;; --------------------------------------------------------------------------
(define-primitive
"split"
:params ((s :as string) &rest (sep :as string))
@@ -478,6 +538,9 @@
:returns "boolean"
:doc "True if string s ends with suffix.")
;; --------------------------------------------------------------------------
;; Core — Dict operations
;; --------------------------------------------------------------------------
(define-module :core.collections)
(define-primitive
@@ -528,15 +591,15 @@
:returns "list"
:doc "All elements except the first.")
;; --------------------------------------------------------------------------
;; Stdlib — Format
;; --------------------------------------------------------------------------
(define-primitive
"nth"
:params ((coll :as list) (n :as number))
:returns "any"
:doc "Element at index n, or nil if out of bounds.")
;; --------------------------------------------------------------------------
;; Core — Dict operations
;; --------------------------------------------------------------------------
(define-primitive
"cons"
:params (x (coll :as list))
@@ -561,6 +624,9 @@
:returns "list"
:doc "Return coll in reverse order.")
;; --------------------------------------------------------------------------
;; Stdlib — Text
;; --------------------------------------------------------------------------
(define-primitive
"flatten"
:params ((coll :as list))
@@ -581,21 +647,27 @@
(define-module :core.dict)
;; --------------------------------------------------------------------------
;; Stdlib — Style
;; --------------------------------------------------------------------------
;; --------------------------------------------------------------------------
;; Stdlib — Debug
;; --------------------------------------------------------------------------
(define-primitive
"keys"
:params ((d :as dict))
:returns "list"
:doc "List of dict keys.")
;; --------------------------------------------------------------------------
;; Stdlib — Format
;; --------------------------------------------------------------------------
(define-primitive
"vals"
:params ((d :as dict))
:returns "list"
:doc "List of dict values.")
;; --------------------------------------------------------------------------
;; Type introspection — platform primitives
;; --------------------------------------------------------------------------
(define-primitive
"merge"
:params (&rest (dicts :as dict))
@@ -620,9 +692,6 @@
:returns "dict"
:doc "Return new dict with keys removed.")
;; --------------------------------------------------------------------------
;; Stdlib — Text
;; --------------------------------------------------------------------------
(define-primitive
"dict-set!"
:params ((d :as dict) key val)
@@ -643,12 +712,6 @@
:returns "string"
:doc "Parse ISO date string and format with strftime-style format.")
;; --------------------------------------------------------------------------
;; Stdlib — Style
;; --------------------------------------------------------------------------
;; --------------------------------------------------------------------------
;; Stdlib — Debug
;; --------------------------------------------------------------------------
(define-primitive
"format-decimal"
:params ((val :as number) &rest (places :as number))
@@ -661,9 +724,6 @@
:returns "number"
:doc "Parse string to integer with optional default on failure.")
;; --------------------------------------------------------------------------
;; Type introspection — platform primitives
;; --------------------------------------------------------------------------
(define-primitive
"parse-datetime"
:params ((s :as string))