将已知参数传递给Scheme函数

时间:2018-08-10 05:02:41

标签: scheme

我有一个函数primeFactors,我想输入一个数字,并返回一个数字因子的列表。看来

(define (primeFactors x '()) ...FOOBAR)

无效,但是解决方法

(define (primeFactors x) (primeFactors2 x '()))

在其他地方定义primeFactors2

会起作用,因为调用函数但未定义该函数时,我可以传递作为参数。有没有那么糟糕的方式来进行这种预定的参数传递?

1 个答案:

答案 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))))

在执行递归的情况下,局部函数只是为了使其更有效,因为它只是初始调用而没有第二个参数。