Functional programming 要在编程中交换元素吗

Functional programming 要在编程中交换元素吗,functional-programming,scheme,Functional Programming,Scheme,我在语言上胡闹,需要一些帮助。我想创建一个交换函数,用于交换第一个函数和第二个函数。因此,如果(交换)(a b c d e g)) 应该返回(b a d c e g)。我不想存储任何值。在scheme中是否有这样做的功能或方法?我不知道我是否会定义这样一个列表 (定义列表1(列表'a'b'c'd'e)) 然后不确定要做什么诀窍是一次处理两个元素,交换它们并在递归中推进两个元素。这就是我的意思: (define (swap lst) ; if the list is empty o

我在语言上胡闹,需要一些帮助。我想创建一个交换函数,用于交换第一个函数和第二个函数。因此,如果(交换)(a b c d e g)) 应该返回(b a d c e g)。我不想存储任何值。在scheme中是否有这样做的功能或方法?我不知道我是否会定义这样一个列表

(定义列表1(列表'a'b'c'd'e))


然后不确定要做什么

诀窍是一次处理两个元素,交换它们并在递归中推进两个元素。这就是我的意思:

(define (swap lst)
        ; if the list is empty or has a single element
  (cond ((or (null? lst) (null? (cdr lst)))
        ; then return that list
         lst)
        ; otherwise build a new list
        (else
        ; by first adding the second element
         (cons (cadr lst)
        ; and then adding the first element
               (cons (car lst)
        ; finally, advance the recursion over two elements
                     (swap (cddr lst)))))))
我相信问题中的示例输出是错误的,
f
来自哪里?例如,我期望的结果是:

(swap '(a b c d e g))
=> '(b a d c g e)

(swap '(a b c d e))
=> '(b a d c e)

(swap '(a))
=> '(a)

(swap '())
=> '()

诀窍是一次处理两个元素,交换它们并在递归中推进两个元素。这就是我的意思:

(define (swap lst)
        ; if the list is empty or has a single element
  (cond ((or (null? lst) (null? (cdr lst)))
        ; then return that list
         lst)
        ; otherwise build a new list
        (else
        ; by first adding the second element
         (cons (cadr lst)
        ; and then adding the first element
               (cons (car lst)
        ; finally, advance the recursion over two elements
                     (swap (cddr lst)))))))
我相信问题中的示例输出是错误的,
f
来自哪里?例如,我期望的结果是:

(swap '(a b c d e g))
=> '(b a d c g e)

(swap '(a b c d e))
=> '(b a d c e)

(swap '(a))
=> '(a)

(swap '())
=> '()

这不是我想要的。@HaroldB当然是。根据
交换索引的定义,您只需执行
(定义(交换列表)(交换索引0 1列表)列表)
f
从何而来?在您的示例中,您每交换列表中的2个,添加一个
f
,并保留最后两个。这是错误吗?还有,你是在寻找一个突变还是一个新的列表?一个新的列表更干净。这不是我想要的。@HaroldB当然是。根据
交换索引的定义,您只需执行
(定义(交换列表)(交换索引0 1列表)列表)
f
从何而来?在您的示例中,您每交换列表中的2个,添加一个
f
,并保留最后两个。这是错误吗?还有,你是在寻找一个突变还是一个新的列表?新的名单更干净。哦,对不起,你说得对。谢谢你的评论。帮了我很多忙。我从不通过打字来理解有代码的人,但你做得很好。我会的。实际上还有一个问题。如果条件为空,您什么时候有?(cdr lst)))这是否意味着您取出列表中的第一个元素,然后放入下一个2?cadr实际上是做什么的。如果你能发电子邮件给我,也可以吗teamdv101@yahoo.com?如果列表中有奇数个元素,我们必须询问
(null?(cdr lst))
,因为在这种情况下,最后一个(单个)元素无法交换
(cadr x)
(car(cdr x))的缩写
(cddr x)
(cdr(cdr x))的缩写
,依此类推。。。你明白了。对不起,我不通过电子邮件回答问题哦,对不起,你说得对。谢谢你的评论。帮了我很多忙。我从不通过打字来理解有代码的人,但你做得很好。我会的。实际上还有一个问题。如果条件为空,您什么时候有?(cdr lst)))这是否意味着您取出列表中的第一个元素,然后放入下一个2?cadr实际上是做什么的。如果你能发电子邮件给我,也可以吗teamdv101@yahoo.com?如果列表中有奇数个元素,我们必须询问
(null?(cdr lst))
,因为在这种情况下,最后一个(单个)元素无法交换
(cadr x)
(car(cdr x))的缩写
(cddr x)
(cdr(cdr x))的缩写
,依此类推。。。你明白了。对不起,我不通过电子邮件回答问题