mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 16:57:35 +02:00
Added (pack-lambda-arguments)
This commit is contained in:
parent
639d03691c
commit
55df97d215
1 changed files with 9 additions and 13 deletions
|
@ -22,6 +22,7 @@
|
||||||
lambda->formals
|
lambda->formals
|
||||||
lambda-formals-type
|
lambda-formals-type
|
||||||
lambda-varargs-var
|
lambda-varargs-var
|
||||||
|
pack-lambda-arguments
|
||||||
;; Environments
|
;; Environments
|
||||||
env:enclosing-environment
|
env:enclosing-environment
|
||||||
env:first-frame
|
env:first-frame
|
||||||
|
@ -44,7 +45,6 @@
|
||||||
mangle
|
mangle
|
||||||
mangle-global
|
mangle-global
|
||||||
;; Scheme library functions
|
;; Scheme library functions
|
||||||
util:take
|
|
||||||
gensym
|
gensym
|
||||||
delete
|
delete
|
||||||
delete-duplicates
|
delete-duplicates
|
||||||
|
@ -54,6 +54,7 @@
|
||||||
list-insert-at!
|
list-insert-at!
|
||||||
list-prefix?
|
list-prefix?
|
||||||
string-replace-all
|
string-replace-all
|
||||||
|
take
|
||||||
filter)
|
filter)
|
||||||
(begin
|
(begin
|
||||||
|
|
||||||
|
@ -136,17 +137,10 @@
|
||||||
((args:varargs)
|
((args:varargs)
|
||||||
(list args))
|
(list args))
|
||||||
((args:fixed-with-varargs)
|
((args:fixed-with-varargs)
|
||||||
(let ((num-req-args (length/obj formals)))
|
(let* ((num-req-args (length/obj formals))
|
||||||
; required - (util:take args num-req-args)
|
(areq (take args num-req-args))
|
||||||
; optionals - reverse args, take remaining
|
(aopt (list-tail args num-req-args)))
|
||||||
|
(append areq (list aopt))))
|
||||||
;; TODO: take required args, then take optionals
|
|
||||||
;; pack all optionals as a (possibly empty) list,
|
|
||||||
;; then append it as the last arg
|
|
||||||
|
|
||||||
;; TODO: need to be careful about performance, are doing a lot
|
|
||||||
;; of list traversals for a single function call
|
|
||||||
'TODO))
|
|
||||||
(else
|
(else
|
||||||
args)))
|
args)))
|
||||||
|
|
||||||
|
@ -159,7 +153,9 @@
|
||||||
(else
|
(else
|
||||||
len))))
|
len))))
|
||||||
|
|
||||||
(define (util:take lis k)
|
; take : list -> integer -> list
|
||||||
|
; The take function from SRFI 1
|
||||||
|
(define (take lis k)
|
||||||
;(check-arg integer? k take)
|
;(check-arg integer? k take)
|
||||||
(let recur ((lis lis) (k k))
|
(let recur ((lis lis) (k k))
|
||||||
(if (zero? k) '()
|
(if (zero? k) '()
|
||||||
|
|
Loading…
Add table
Reference in a new issue