Added cabal and vim dir
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
;;;
|
||||
;;; husk-scheme
|
||||
;;; http://justinethier.github.com/husk-scheme
|
||||
;;;
|
||||
;;; Written by Justin Ethier
|
||||
;;;
|
||||
;;; r7rs-small case-lambda library
|
||||
;;;
|
||||
|
||||
|
||||
; TODO: this is the macro from the spec, but husk
|
||||
; does not handle the let-syntax portion...
|
||||
|
||||
(define-library (scheme case-lambda)
|
||||
(export
|
||||
case-lambda)
|
||||
(import (scheme base))
|
||||
(begin
|
||||
(define-syntax case-lambda
|
||||
(syntax-rules ()
|
||||
((case-lambda (params body0 ...) ...)
|
||||
(lambda args
|
||||
(let ((len (length args)))
|
||||
(let-syntax
|
||||
((cl (syntax-rules ::: ()
|
||||
((cl)
|
||||
(error "no matching clause"))
|
||||
((cl ((p :::) body :::) rest :::)
|
||||
;((cl ((p :::) . body) . rest)
|
||||
(if (= len (length '(p :::)))
|
||||
(apply (lambda (p :::)
|
||||
body :::)
|
||||
;. body)
|
||||
args)
|
||||
(cl rest :::)))
|
||||
;(cl . rest)))
|
||||
; TODO: for now, var-length arg support is broken
|
||||
;((cl ((p ::: . tail) . body)
|
||||
; . rest)
|
||||
; (if (>= len (length '(p :::)))
|
||||
; (apply
|
||||
; (lambda (p ::: . tail)
|
||||
; . body)
|
||||
; args)
|
||||
; (cl . rest)))
|
||||
)))
|
||||
(cl (params body0 ...) ...)))))))
|
||||
))
|
Reference in New Issue
Block a user