我有一个函数primeFactors
,我想输入一个数字,并返回一个数字因子的列表。看来
(define (primeFactors x '()) ...FOOBAR)
无效,但是解决方法
(define (primeFactors x) (primeFactors2 x '()))
primeFactors2
的会起作用,因为调用函数但未定义该函数时,我可以传递作为参数。有没有那么糟糕的方式来进行这种预定的参数传递?
答案 0 :(得分:0)
小型R7RS和R6RS在case-lambda
和(scheme case-lambda)
库中有(rnrs control 6)
:
#!r7rs
(import (scheme base)
(scheme case-lambda))
(define prime-factors
(case-lambda
((n) (prime-factors n '()))
((n lst) 'implementation)))
对于R5RS,我们有SRFI-89 Positional arguments。也许您最喜欢的实现已经拥有它,如果没有,您可以从规范中获取它。运作方式如下:
#!r5rs
(define* (prime-factors x (lst '()))
'implementation)
一种完全兼容的Scheme方法:
;;; (prim-factors n [lst '()]) => lst
(define (prime-factors n . llst)
(define (prime-factors n lst)
'implementation)
(prime-factors n (if (null? llst) '() (car llst))))
在执行递归的情况下,局部函数只是为了使其更有效,因为它只是初始调用而没有第二个参数。