(define (arguments&keys&values args) (let more ([keys '()] [key-args '()] [pos-args '()] [rest args]) (cond [(null? rest) (values pos-args keys key-args)] [(keyword? (car rest)) (more (cons (car rest) keys) (cons (cadr rest) key-args) pos-args (cddr rest))] [else (more keys key-args (cons (car rest) pos-args) (cdr rest))]))) (define (plist->alist args) (receive (args keys vals) (arguments&keys&values args) (map cons keys vals)))