我目前正在学习方案,并且遇到了一个难倒我的示例问题。 情况是,你有数字作为列表。数字2048是(8 4 0 2),399是(9 9 3)。 问题是要求比较这两个列表的相等性,在这种情况下list1> list2。在方案中比较两个数字列表的相等性
我迄今为止代码:
(define dl>
(lambda (d1 d2)
(if (> (length d2) (length d1))
#f
;then
(if (> (length d1) (length d2))
#t
(let ((Rd1 (reverse d1)) (Rd2 (reverse d2)))
(let loop((ls1 Rd1) (ls2 Rd2))
(cond
((> (car ls1) (car ls2)) #t)
((and (= (car ls1) (car ls2)) (not (null? (cdr ls2))) (not (null? (cdr ls1)))) (loop (cdr ls1) (cdr ls2)))
((and (= (car ls1) (car ls2)) (null? (cdr ls2)) (null? (cdr ls1))) #f) ; dlnats are equal
(else #f)
)
))
))))
随着我的算法我试图开始检查,如果第二个名单是在长度(即更多的数字),那么这是不是比,因为它是不可能的,因此更大返回false。
然后它检查list1是否> list2。如果是这样,这是真的,因为list2不可能是> list1。
在这段代码中,我们可以假设它们是相同长度的列表。然后我倒过了名单。这样做是为了让最重要的位是第一位。然后循环遍历这两个列表,每次循环时都会添加检查。
如果LS1的元件> LS2那么它应该返回真
如果元素是相等的,二者的下一个值不为空,然后循环再次
如果元素相等和下一值都是null然后列表是相等的,它应该返回false
在这一点上,我真的不知道为什么代码不工作。它会工作,并提供正确的输出时,输入的字符串是不同的长度,但当他们在相同的长度我得到的错误:应用程序:
不是一个过程; 预期考虑到可以应用到参数的过程 :#T 参数...:[无]
只是想知道如果任何人能发现什么批判错的代码,我正在循环块,因为这似乎成为问题。提前致谢。
的';那么'注释不应该有前面的左括号。 – uselpa 2014-11-01 15:40:55
另外,取消注释'(else #f)'。 – uselpa 2014-11-01 15:41:54
好的我已经完成了这个请检查编辑,因为我仍然得到相同的错误 – Ben 2014-11-01 15:48:38