将已知参数传递给Scheme函数

将已知参数传递给Scheme函数,scheme,Scheme,我有一个函数primeFactors,我想把它作为一个数字,并返回该数字的因子列表。看来 (定义(primeFactors x'())…FOOBAR) 无效,但是 (定义(primeFactors x)(primeFactors 2 x'()) 使用在别处定义的primeFactors2可以工作,因为我可以在调用函数但不定义它时将空列表作为参数传递。有没有一种不那么可怕的方法来进行这种预先确定的参数传递?R7RS较小,并且R6RS在库中具有案例lambda(方案案例lambda)和(rnrs控制

我有一个函数
primeFactors
,我想把它作为一个数字,并返回该数字的因子列表。看来

(定义(primeFactors x'())…FOOBAR)

无效,但是

(定义(primeFactors x)(primeFactors 2 x'())


使用在别处定义的
primeFactors2
可以工作,因为我可以在调用函数但不定义它时将空列表作为参数传递。有没有一种不那么可怕的方法来进行这种预先确定的参数传递?

R7RS较小,并且R6RS在库中具有
案例lambda
(方案案例lambda)和
(rnrs控制6)

#!r7rs
(导入(方案库)
(计划个案(a))
(定义主要因素)
(lambda案)
((n)(素因子n’())
((n lst)“实施”))
对于R5R,我们有。也许您最喜欢的实现已经有了它,如果没有,您可以从规范中获取它。下面是它的工作原理:

#!r5rs
(定义*(素因子x(lst’())
("实施)
一种完全兼容的方案实现方法:

;;;(原始因子n[lst'()])=>lst
(定义(基本因子n.llst)
(定义(基本因子n lst)
("实施)
(素因子n(如果(null?llst)“”(car llst)))

局部函数只是为了在执行递归时提高效率,因为它只是没有第二个参数的初始调用

如果调用时忽略了一个可选参数,是否希望该函数具有一个使用默认值的可选参数?如果是的话。。。您没有提到正在使用的方案,但许多流行的方案都支持DSSL样式的参数列表或其他具有相同功能的语法。在您的特定情况下,您还可以使用
(lambda(x.rest))
。请参见“and”。“不太糟糕”的方法是将任务委托给本地定义的函数。这避免了用纯内部状态的东西污染接口。