将已知参数传递给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”。“不太糟糕”的方法是将任务委托给本地定义的函数。这避免了用纯内部状态的东西污染接口。