我有这样的代码:计划 - 在列表中插入数
(define (Insert value list)
(if (null? list) (list value))
(if (< value (car list)) (list (Insert (value list))))
(Insert (cdr list) list))
我想这个代码,以列表(假设它是在低增长的整数的顺序),并在正确的位置插入一个数字。此代码不起作用,但我不知道为什么。有人知道吗?
我有这样的代码:计划 - 在列表中插入数
(define (Insert value list)
(if (null? list) (list value))
(if (< value (car list)) (list (Insert (value list))))
(Insert (cdr list) list))
我想这个代码,以列表(假设它是在低增长的整数的顺序),并在正确的位置插入一个数字。此代码不起作用,但我不知道为什么。有人知道吗?
你有一堆的错误。首先,让我们看看如何可以解决您实现:
(define (insert value lst)
(cond ((null? lst) ; if the list is empty
(list value)) ; then return a single-element list
((<= value (car lst)) ; if current element >= value
(cons value lst)) ; insert value in current position
(else ; otherwise keep building the list
(cons (car lst) ; by adding current element
(insert value (cdr lst)))))) ; and advancing recursion
现在,让我们来看看出了什么问题与您的代码:
list
,与冲突内置同名的程序 - 您实际使用的程序!很明显,他们会冲突cond
表达式。请注意,前两个if
的值将被丢弃,因为它们不是嵌套的(在过程中,只返回上一个表达式的值)。当你写if
•不用相应else
部分cons
用列表的其余部分荷兰国际集团的value
停止递归。最好是尽快,当元素> =值停止,如果有重复的元素value
cons
当前元素正在使用cond和其他必要的? –
@ A.L否,或者你可以嵌套'if's。这是丑陋的,但工程。你需要确保的是条件是相互排斥的 –
如何使用cons?我只有使用append的经验。会在这种情况下追加工作吗?或者缺点是必要的 –
你在代码中有几个错误。首先,在Scheme中包含if
s的else子句更自然。另外,你错了最后的if
。这里是一个版本的代码稍作修改:
(define (Insert value lst)
(if (null? lst) (list value)
(if (< value (car lst))
(cons value lst)
(cons (car lst) (Insert value (cdr lst))))))
请注意,您必须对当值小于列表的头部提供的行动,当它不是,你必须构建返回值使用cons
。
感谢您的意见 –
这里有一个根本的错误,就是你构建输出列表的方式。使用'cons',参考你的教科书。 –