Hil*_*ila 10 syntax scheme racket
在Scheme中,您可以定义以下过程:
(define (proc . vars)
(display (length vars)))
Run Code Online (Sandbox Code Playgroud)
这将允许您发送任何数量的args到proc.但是当我尝试这样做时:
(define proc (lambda (. vars)
(display (length vars))))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
读:非法使用"."
我似乎无法找到获取任意数量参数的lambda表达式的正确语法.想法?
(我正在使用DrScheme,版本209,语言设置为PLT(图形))
谢谢!
Tim*_*Tim 15
第一个参数lambda是参数列表:
(define proc (lambda vars
(display (length vars))))
(proc 1 2 4) ; 3
(proc) ; 0
Run Code Online (Sandbox Code Playgroud)
理解(lambda args ...)语法的关键洞察力(其他海报已经帮助已经发布)是一个单独的非列表项(在这种情况下,args)是一个退化的不正确列表.例:
(define a '(arg1 arg2 . rest))
a ; => (arg1 arg2 . rest) (improper list of length 2)
(cdr a) ; => (arg2 . rest) (improper list of length 1)
(cdr (cdr a)) ; => rest (improper list of length 0)
Run Code Online (Sandbox Code Playgroud)