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’())
(套-