我无法在此方案功能中附加到列表中。
该函数用于获取2个参数,并返回由第2个元素组成的列表,第1个元素中指定的次数。例如,如果您致电(make-list? 5 4)
,则输出应为(4 4 4 4 4)
。
问题是当我使用cons
时,我得到了((((4 . 4) . 4) . 4) . 4)
。据我了解,我每次都将整个列表的末尾附加为对象,不是我想要的最后一个元素。我不确定如何解决它。
这是我的功能,关于如何利用最后一个元素而不是列表作为对象的建议会很棒。 (或其他建议,如果这不是唯一/真正的问题。)
;make-list
(define make-list?
(lambda (N A)
(if (= N 1)
A
(cons (make-list?(- N 1) A ) A)
)
)
)
答案 0 :(得分:2)
一个好的经验法则是每个列表都由'()
终止。在这种情况下,将基础案例设为0并使其返回空列表可能更具说明性:
(define make-list?
(lambda (n a)
(if (zero? n)
'()
(cons a (make-list (sub1 n) a)))))
所以在这个例子中,如果我们点击0,那么我们返回空列表以“封锁”我们正在构建的列表。
答案 1 :(得分:1)
你的问题很烦人,是由于细胞的工作原理。 (cons a b)如果b不是列表,则创建cons单元格。通过重新排序,你将原子添加到列表中,而不是相反,并使其成为最里面的项目是一个列表(顺便说一下,你可以使用(cons A'())而不是(列表A)在下面的定义中,你可以解决这个问题。
(define make-list?
(lambda (N A)
(if (= N 1)
(list A)
(cons A (make-list?(- N 1) A ))
)
)
)