Arity不匹配:放置参数的位置

时间:2018-10-14 00:59:41

标签: scheme

使用我的代码,我需要使用多个函数并将它们组合为一个函数,该函数的结果将为a和b之间的第n个素数。我需要使用的功能是gen-consecutive filter value-at-position

我的代码的问题在于,函数gen-consecutive需要3个参数,即函数(f)和充当范围的a和b,我不确定将f放在哪里nth-prime-between函数中的实参。 我不断收到错误消息“ gen-conecutive:arity mismatch”,它期望3个参数(f a b)而不是2个参数(a b)

这是我的代码:

(define (nth-prime-between a b n)
   (value-at-position filter prime? (gen-consecutive a b)) n)

以下是其他功能:

(define (gen-consecutive f a b)
  (if (>  a b)
      '()
      (cons (f a) (gen-consecutive f (+ a 1) b))))

(define (filter f lst)
   (cond ((null? lst) '())
        ((f (car lst))
         (cons (car lst) (filter f (cdr lst))))
        (else
         (filter f (cdr lst)))))

(define (value-at-position lst k)
  (cond ((null? lst) lst)
        ((= k 1) (car lst))
        (else (value-at-position (- k 1) (cdr lst)))))

1 个答案:

答案 0 :(得分:0)

您的程序中有3个错误! 我没有函数质数?,因此我使用了奇数?代替

(define (nth-prime-between a b n)

  ;; missing parenthesis for the function filter
  ;; n is value of the function
  ;; (value-at-position filter odd? (gen-consecutive a b)) n)

  (value-at-position (filter odd? (gen-consecutive a b)) n))

;; kill the parameter f
;;
;; (define (gen-consecutive f a b)
;;   (if (>  a b)
;;       '()
;;       (cons (f a) (gen-consecutive f (+ a 1) b))))

(define (gen-consecutive a b)
  (if (>  a b)
      '()
      (cons a (gen-consecutive (+ a 1) b))))

(define (filter f lst)
     (cond ((null? lst) '())
        ((f (car lst))
         (cons (car lst) (filter f (cdr lst))))
        (else
          (filter f (cdr lst)))))

 (define (value-at-position lst k)
     (cond ((null? lst) lst)
        ((= k 1) (car lst))
         ;; the sequence of (- k 1) and (cdr lst) is wrong
         ;; (else (value-at-position (- k 1) (cdr lst)))))
         (else (value-at-position (cdr lst) (- k 1)))))

 (define (odd? N)
   (if (= (remainder N 2) 0)
      #f
      #t))

(nth-prime-between 1 10 3)

任务的更深层问题是: 当您致电(nth-prime-between 1000 10000 2)时 您必须使用(素数?n)测试9000个数字。大概测试10个数字就足够了。 顺便说一下,存在任意长度的间隔,其中没有素数。 用素数测试数字N?您需要知道素数减去(平方根N)。您将它们存储在哪里? 如果这是一项艰巨的任务,则可以使用具有良好停止条件的Eratosthenes筛子编写程序。