Scheme 元素在使用递归的列表中的可能位置?

Scheme 元素在使用递归的列表中的可能位置?,scheme,Scheme,有人能告诉我们如何在列表中的不同位置插入一个元素,并使用递归返回这些可能组合的列表吗 例如,列表是(23),要插入的元素是1 输出: list( list (1 2 3) list (2 1 3) list (2 3 1) ) 第一步是确定输出应该是什么样子,在这种情况下,它应该是一个列表列表。 第二步通常是将问题分解为输入列表的案例 空列表的情况非常简单——结果是一个包含一个单例列表的列表 (define (insert i ls) (if (null? ls

有人能告诉我们如何在列表中的不同位置插入一个元素,并使用
递归返回这些可能组合的列表吗

例如,列表是
(23)
,要插入的元素是
1

输出:

list(
    list (1 2 3)
    list (2 1 3)
    list (2 3 1)
)

第一步是确定输出应该是什么样子,在这种情况下,它应该是一个列表列表。
第二步通常是将问题分解为输入列表的案例

空列表的情况非常简单——结果是一个包含一个单例列表的列表

(define (insert i ls)
    (if (null? ls)
        (list (list i))
        (...)))
对于非空列表的情况,检查预期结果的结构很有帮助

(insert 1 '(2 3)) 
-->
((1 2 3) (2 1 3) (2 3 1))
请注意,只有结果的第一个元素将
1
作为其第一个元素,我们可以使用
(cons1'(23))
轻松创建它
其他元素都将输入列表的第一个元素作为它们的第一个元素,如果您查看它们的尾部,
(13)
(31)
,您将看到它们是递归的结果
(insert 1'(3))

缺少的是,您需要在之后将
cons
2
添加到它们中的每一个上

现在我们有了所有必要的部分——总结

(define (insert i ls)
    (if (null? ls)
        (list (list i))
        (cons (cons i ls) (<...something...> (insert i (cdr ls))))))
(定义(插入)
(如果(空?ls)
(名单(名单一))
(cons(cons i ls)((插入i(cdr ls()()())))

我给你留了一个“”的部分让你弄清楚

到目前为止你尝试了什么?