Add qsort3.
[scheme-dev.git] / curry.scm
blob38c3e2017da090c8d58ce43e50c7f495d0a42309
1 (define (k . a)
2   (k2 k1 3 '() a))
4 (define (k2 rf ng prv arg)
5   (let ((al (length arg)))
6     (if (= al ng)
7         (apply rf (append prv arg))
8         (if (< al ng)
9             (lambda (. x)
10               (k2 rf (- ng al) (append prv arg) x))
11             (error "too many arguments")))))
13 (define (k1 a b c)
14     (* a b c))
16 ;; ----------------------------------------
18 (define r1 (k 1))   ;; returns a lambda needs 2
19 (define r2 (r1 2))  ;; returns a lambda needs 1
20 (r2 3)              ;; returns 6
22 (define r3 (k 1 2)) ;; returns a lambda needs 1
23 (r3 3)              ;; returns 6
25 (k 1 2 3)           ;; returns 6 right away
27 (r2 3 4 5)
28 (r3 3 4)
29 (k 1 2 3 4)         ;; above 3 are all errors
31 ;; ----------------------------------------
32 ;; pitfall: need to know the target function arity, any ideas?