我必须用以下输入编写一个函数:
((something1 . something2) (something1 . something2) ... (something1 . something2))
和相应的输出:
((something2 . something1) (something2 . something1) ... (something2 . something1))
我无法使用vector
,for
,while
,set
,reverse
,set-list
,list-tail
, append
,length
或以!
结尾的任何程序。
我知道这是错的,但也许有人看到我的错误在哪里:
(define (odwroc-alfabet list)
(let loop ((list list))
(if (pair? list)
(cons ((cdar list) (caar list)))
list)))
答案 0 :(得分:1)
创建第一个交换对是不够的。你还需要递归到其余的对中并交换它们。这是您的代码的修改版本:
(define (odwroc-alfabet list)
(let loop ((list list))
(if (pair? list)
(cons (cons (cdar list) (caar list)) (loop (cdr list)))
list)))
当然,loop
在这里用词不当,因为你实际上是在递归而不是循环。
答案 1 :(得分:0)
只需使用map
:
(define (odwroc-alfabet lst)
(map (lambda (e) (cons (cdr e) (car e))) lst))