【发布时间】:2011-12-10 22:17:17
【问题描述】:
我的程序有点问题。这个过程需要一个列表列表,虽然他的长度大于 1,但应用一个减去 2 个列表并做差异的过程。它的结果是集合子集的问题。 示例我需要什么:
args=('(1)'(1)'(3))
length != 1 -> 过程 (if(null?(minus '(1) '(1))))
-> 递归(子(cdr args))
args=('(1) '(3))
length !=1 -> 过程 (if(null?(minus '(1) '(3)))) -
#f 结束。
但是我的程序我不知道是什么然后返回#t...
(define sub
(lambda args
(if(= (length args) 1) #t
(if(null? ( minus (list-ref args 0) (list-ref args 1)))
(sub (cdr args))
#f))))
已修复:)
(define subsethood
(lambda args
(sub args)
))
(define (sub args)
(if(= (length args) 1) #t
(if(null? ( minus (list-ref args 0) (list-ref args 1)))
(sub (cdr args))
#f)))
【问题讨论】:
-
设置差异的过程,带2个参数-lists,例如:(a b) (a b c) = () (a b) (a e) = (b)
-
请发布一些示例输入和输出。目前尚不清楚该程序试图做什么。
-
(sub '(1) '(1) '(2)) #t (sub '(1) '(1)) #t (sub '(2) '(1)) # f 它使用 2 个参数,但是如果我使用递归,因为我想将它用于任意数量的参数,它不起作用。思想主体是一个程序返回#t,当第一个参数是第二个的子集,第二个是第三个的子集等等。过程减去帮助我,因为如果返回()表示第一个列表的列表,如果是 2 个列表的子集,我可以继续递归,减少列表和减号列表可以应用于其他 2 个参数,如果减号的返回不是空列表,我不想继续,我可以说#f
-
我尝试追踪它
> (require (lib "trace.ss")) > (trace sub) > (sub '(1) '(1) '(9999) '(345) '(23132)) >(sub '(1) '(1) '(9999) '(345) '(23132)) >(sub '((1) (9999) (345) (23132))) <#t #t,但我不知道为什么在第一次招募期间停止,因为 '((1) (9999) (345) (23132))) 的长度是 4,没有 1 . -
Hm with args 而不是 #t return > (sub '(1) '(1) '(9999) '(345) '(23132)) (((1) (9999) (345 ) (23132))),我的列表中做了一些事情,这就是问题