List Can';我找不到这个代码(方案)有什么问题

List Can';我找不到这个代码(方案)有什么问题,list,scheme,set,List,Scheme,Set,我正在编写一个以线性时间运行的过程,该过程返回不属于这两个集合的任何数字。我现在的代码是 (define (set-diff setA setB) (define (iter A B result) (if (or (null? A) (null? B)) (reverse result) (if (>= (car A) (car B)) (iter (cdr A) (cdr B) '(

我正在编写一个以线性时间运行的过程,该过程返回不属于这两个集合的任何数字。我现在的代码是

(define (set-diff setA setB)
    (define (iter A B result)
        (if (or (null? A) (null? B))
            (reverse result)
            (if (>= (car A) (car B))
                (iter (cdr A) (cdr B) '() )
                    (if (<  (car A) (car B))
                    (cons (car B) result (iter (cdr A) (cdr B) '() ))))))
(iter setA  SetB '())) 
(定义(设置差异setA setB)
(定义(iter A B结果)
(如果(或(无效A)(无效B))
(结果相反)
(如果(>=(A车)(B车))
(国际热核试验堆(cdr A)(cdr B)’())
(如果(<(A车)(B车))
(cons(car B)结果(国际热核实验堆(cdr A)(cdr B)’())())
(国际热核实验堆setA SetB’())

不断出现的问题是,当这个函数运行时,比如说通过任意的测试用例
(set diff'(1 5 7 9)'(1 7 8 9 10));(5) 
,我收到一条错误消息,说我用错误的参数数调用了该过程。

下一行的
cons
有三个参数,但应该只有两个


您还在两个位置拼写了
setB
setB
,这可能会导致某些方案系统出现问题。

最后一行的
cons
有三个参数,但应该只有两个


您还在两个位置拼写了
setB
setB
,这可能会导致某些方案系统出现问题。

最后一行的
cons
有三个参数,但应该只有两个


您还在两个位置拼写了
setB
setB
,这可能会导致某些方案系统出现问题。

最后一行的
cons
有三个参数,但应该只有两个


您在两个地方的
setB
setB
拼写也不同,这可能会导致某些方案系统出现问题。

问题中没有说明,但看起来输入集已排序,输出集也必须排序。如果是这样的话,那么问题中的代码远非正确,你没有考虑所有的情况,递归的推进方式是错误的,构建结果的方式也是错误的

另外,最后一个
如果
没有相应的
else
部分,这可能会在一些口译员中引起错误(无论如何,最好在这里使用
cond
),最后一个
cons
接收三个参数,而不是正确的两个(顺便说一句,这导致了报告的错误)最后,传递给iter的参数与程序接收到的参数不同(如果口译员考虑字母大小写,这可能是问题,也可能不是问题)。该函数需要完全重写才能工作:

(define (set-diff setA setB)
  (define (iter A B result)
    (cond ((null? A) (append (reverse result) B))
          ((null? B) (append (reverse result) A))
          ((< (car A) (car B))
           (iter (cdr A) B (cons (car A) result)))
          ((> (car A) (car B))
           (iter A (cdr B) (cons (car B) result)))
          (else (iter (cdr A) (cdr B) result))))
  (iter setA  setB '()))

(set-diff '(1 5 7 9) '(1 7 8 9 10))
=> '(5 8 10) ; this is the correct answer for the sample input
(定义(设置差异setA setB)
(定义(iter A B结果)
(条件((空?A)(附加(反向结果)B))
((空?B)(附加(反向结果)A))
(<(A车)(B车))
(iter(cdr A)B(cons(car A)结果)
((>(A车)(B车))
(iter A(cdr B)(cons(car B)结果)
(其他(国际热核实验堆(cdr A)(cdr B)结果)))
(国际热核实验堆setA setB’())
(集差"(1 5 7 9)(1 7 8 9 10))
=> '(5 8 10) ; 这是示例输入的正确答案

问题中没有说明,但看起来输入集已排序,输出集也必须排序。如果是这样的话,那么问题中的代码远非正确,你没有考虑所有的情况,递归的推进方式是错误的,构建结果的方式也是错误的

另外,最后一个
如果
没有相应的
else
部分,这可能会在一些口译员中引起错误(无论如何,最好在这里使用
cond
),最后一个
cons
接收三个参数,而不是正确的两个(顺便说一句,这导致了报告的错误)最后,传递给iter的参数与程序接收到的参数不同(如果口译员考虑字母大小写,这可能是问题,也可能不是问题)。该函数需要完全重写才能工作:

(define (set-diff setA setB)
  (define (iter A B result)
    (cond ((null? A) (append (reverse result) B))
          ((null? B) (append (reverse result) A))
          ((< (car A) (car B))
           (iter (cdr A) B (cons (car A) result)))
          ((> (car A) (car B))
           (iter A (cdr B) (cons (car B) result)))
          (else (iter (cdr A) (cdr B) result))))
  (iter setA  setB '()))

(set-diff '(1 5 7 9) '(1 7 8 9 10))
=> '(5 8 10) ; this is the correct answer for the sample input
(定义(设置差异setA setB)
(定义(iter A B结果)
(条件((空?A)(附加(反向结果)B))
((空?B)(附加(反向结果)A))
(<(A车)(B车))
(iter(cdr A)B(cons(car A)结果)
((>(A车)(B车))
(iter A(cdr B)(cons(car B)结果)
(其他(国际热核实验堆(cdr A)(cdr B)结果)))
(国际热核实验堆setA setB’())
(集差"(1 5 7 9)(1 7 8 9 10))
=> '(5 8 10) ; 这是示例输入的正确答案

问题中没有说明,但看起来输入集已排序,输出集也必须排序。如果是这样的话,那么问题中的代码远非正确,你没有考虑所有的情况,递归的推进方式是错误的,构建结果的方式也是错误的

另外,最后一个
如果
没有相应的
else
部分,这可能会在一些口译员中引起错误(无论如何,最好在这里使用
cond
),最后一个
cons
接收三个参数,而不是正确的两个(顺便说一句,这导致了报告的错误)最后,传递给iter的参数与程序接收到的参数不同(如果口译员考虑字母大小写,这可能是问题,也可能不是问题)。该函数需要完全重写才能工作:

(define (set-diff setA setB)
  (define (iter A B result)
    (cond ((null? A) (append (reverse result) B))
          ((null? B) (append (reverse result) A))
          ((< (car A) (car B))
           (iter (cdr A) B (cons (car A) result)))
          ((> (car A) (car B))
           (iter A (cdr B) (cons (car B) result)))
          (else (iter (cdr A) (cdr B) result))))
  (iter setA  setB '()))

(set-diff '(1 5 7 9) '(1 7 8 9 10))
=> '(5 8 10) ; this is the correct answer for the sample input
(定义(设置差异setA setB)
(定义(iter A B结果)
(条件((空?A)(附加(反向结果)B))
((空?B)(附加(反向结果)A))
(<(A车)(B车))
(iter(cdr A)B(cons(car A)结果)
((>(A车)(B车))
(iter A(cdr B)(cons(car B)结果)
(其他(国际热核实验堆(cdr A)(cdr B)结果)))
(国际热核实验堆setA setB’())
(套-