This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.
    
    Source for wiki BeyondCurryingHemann version 3
    author
    cowan
    comment
    
    ipnr
    127.11.51.1
    name
    BeyondCurryingHemann
    readonly
    0
    text
    [http://webyrd.net/scheme-2013/papers/HemannCurrying2013.pdf λ* : Beyond Currying]
Notes:
The proposed name is `lambda*`, not `λ*`.
The proposal is Variant 5, which has no support for zero-argument or zero-or-more-arguments procedures, with the additional feature of Variant 8, supporting multi-expression bodies.  Section 4 says "nullary `λ∗` functions seem to be of little to no use", and I agree:  they seem to be provided only so that `lambda*` can fully subsume `lambda`, which I think is a mistake (it makes detecting an error in the number of arguments at compile time impossible).
Here is the (not yet debugged) source code:
{{{
(import (scheme case-lambda))
(define-syntax lambda*
  (syntax-rules ()
    ((_ a* e* ...)
     (lambda*-h a* (let () e* ...)))))
(define-syntax lambda*-h
  (syntax-rules ()
    ((_ (a a* ...) e) (posary-h (a a* ...) e))
    ((_ (a a* ... . rest) e)
     (polyvariadic-h (a a* ... . rest) e))))
(define-syntax posary-h 
  (syntax-rules ()
    ((_ (a a* ...) e)
     (letrec
       ((rec
         (case-lambda
           (() rec)
           ((a a* ...) e)
           ((a a* ... . rest)
            (apply (rec a a* ...) rest))
           (some ((lambda more (apply rec (append some more))))))))
        rec))))
(define-syntax polyvariadic-h
  (syntax-rules ()
    ((_ (a a* ... . rest) e)
    (letrec
      ((rec 
        (case-lambda
          (() rec)
          ((a a* ... . rest) e)
          (some ((lambda more (apply rec (append some more))))))))
      rec))))
}}}
    time
    2017-07-02 06:42:35
    version
    3