a few more open-coded primitives

This commit is contained in:
Danny Yoo 2011-03-28 23:23:08 -04:00
parent eb0eee57bd
commit bbb80800db
3 changed files with 29 additions and 1 deletions

View File

@ -473,6 +473,14 @@ EOF
(unless (> (length rand-vals) 0) (unless (> (length rand-vals) 0)
(error '= "Expected at least one argument")) (error '= "Expected at least one argument"))
(assemble-chain "==" rand-vals)] (assemble-chain "==" rand-vals)]
[(>)
(unless (> (length rand-vals) 0)
(error '> "Expected at least one argument"))
(assemble-chain ">" rand-vals)]
[(>=)
(unless (> (length rand-vals) 0)
(error '>= "Expected at least one argument"))
(assemble-chain ">=" rand-vals)]
[(cons) [(cons)
(unless (= (length rand-vals) 2) (unless (= (length rand-vals) 2)
(error 'cons "Expected two arguments")) (error 'cons "Expected two arguments"))
@ -496,7 +504,15 @@ EOF
(unless (= (length rand-vals) 1) (unless (= (length rand-vals) 1)
(error 'null? "Expected one argument")) (error 'null? "Expected one argument"))
(format "(~a === Primitives.null)" (format "(~a === Primitives.null)"
(first rand-vals))]))) (first rand-vals))]
[(not)
(unless (= (length rand-vals) 1)
(error 'not? "Expected one argument"))
(format "(!~a)" (first rand-vals))]
[(eq?)
(unless (= (length rand-vals) 2)
(error 'eq? "Expected 2 arguments"))
(format "(~a === ~a)" (first rand-vals) (second rand-vals))])))
(: assemble-chain (String (Listof String) -> String)) (: assemble-chain (String (Listof String) -> String))

View File

@ -167,11 +167,15 @@
'< '<
'<= '<=
'= '=
'>
'>=
'cons 'cons
'car 'car
'cdr 'cdr
'list 'list
'null? 'null?
'not
'eq?
)) ))
(define-predicate KernelPrimitiveName? KernelPrimitiveName) (define-predicate KernelPrimitiveName? KernelPrimitiveName)

View File

@ -366,6 +366,10 @@
(chain-compare <= (map ensure-real-number rand-vals))] (chain-compare <= (map ensure-real-number rand-vals))]
[(=) [(=)
(chain-compare = (map ensure-real-number rand-vals))] (chain-compare = (map ensure-real-number rand-vals))]
[(>)
(chain-compare > (map ensure-real-number rand-vals))]
[(>=)
(chain-compare >= (map ensure-real-number rand-vals))]
[(cons) [(cons)
(make-MutablePair (first rand-vals) (ensure-list (second rand-vals)))] (make-MutablePair (first rand-vals) (ensure-list (second rand-vals)))]
[(car) [(car)
@ -380,6 +384,10 @@
(loop (rest rand-vals)))]))] (loop (rest rand-vals)))]))]
[(null?) [(null?)
(null? (first rand-vals))] (null? (first rand-vals))]
[(not)
(not (first rand-vals))]
[(eq?)
(eq? (first rand-vals) (second rand-vals))]
[else [else
(error 'evaluate-kernel-primitive-procedure-call "missing operator: ~s\n" op)]))) (error 'evaluate-kernel-primitive-procedure-call "missing operator: ~s\n" op)])))