Scheme 方案的深度反转
当输入((12)(34))列表时,我想将其反转,但不是((34)(12)),这就是reverse所做的,所以我尝试编写一个深度反转过程:Scheme 方案的深度反转,scheme,racket,Scheme,Racket,当输入((12)(34))列表时,我想将其反转,但不是((34)(12)),这就是reverse所做的,所以我尝试编写一个深度反转过程: (define (deep-reverse l) (cond ((null? l) nil) (not (pair? (car l)) l) (else (append (deep-reverse (cdr l)) (list (car l)))))) 但它只是回退((12)(34))。出了什么问题,我如何让它工作?试试:
(define (deep-reverse l)
(cond ((null? l) nil)
(not (pair? (car l)) l)
(else (append (deep-reverse (cdr l)) (list (car l))))))
但它只是回退((12)(34))。出了什么问题,我如何让它工作?试试:
(define (deep-reverse l) (map reverse l))
以上是最简单的答案;一个真正的答案取决于你到底期望深度反转做什么。请看我对你的问题的评论
如果你想要一切,一路走来:
(define (deep-reverse l)
(if (list? l)
(reverse (map deep-reverse l))
l))
以下是它的工作原理(正确):
尝试:
以上是最简单的答案;一个真正的答案取决于你到底期望深度反转做什么。请看我对你的问题的评论
如果你想要一切,一路走来:
(define (deep-reverse l)
(if (list? l)
(reverse (map deep-reverse l))
l))
以下是它的工作原理(正确):
您还必须在代码中对
汽车进行深度倒车。否则,您将无法深入反转列表的最前面部分
(define (deep-reverse l)
(cond ((null? l) nil)
(not (pair? (car l)) l)
(else (append (deep-reverse (cdr l)) (list (deep-reverse (car l)))))))
您还必须在代码中对汽车进行深度倒车。否则,您将无法深入反转列表的最前面部分
(define (deep-reverse l)
(cond ((null? l) nil)
(not (pair? (car l)) l)
(else (append (deep-reverse (cdr l)) (list (deep-reverse (car l)))))))
一个好的开始是与列表相反的过程。然后将其修改为递归应用于列表中的每辆车:
(define (reverse x)
(define (go items tail)
(if (null? items) tail
(go (cdr items) (cons (car items) tail))))
(go x ()))
(define (deep-reverse x)
(define (go items tail)
(cond ((null? items) tail)
((not (pair? items)) items)
(else (go (cdr items) (cons (go (car items) ()) tail)))))
(go x ()))
深度反转的应用将是:
(define x (list (list 1 (list 2 3) 4) 5 6 (list 7 8) 9 10)) (display x) (deep-reverse x)
((1 (2 3) 4) 5 6 (7 8) 9 10)
=> (10 9 (8 7) 6 5 (4 (3 2) 1))
一个好的开始是与列表相反的过程。然后将其修改为递归应用于列表中的每辆车:
(define (reverse x)
(define (go items tail)
(if (null? items) tail
(go (cdr items) (cons (car items) tail))))
(go x ()))
(define (deep-reverse x)
(define (go items tail)
(cond ((null? items) tail)
((not (pair? items)) items)
(else (go (cdr items) (cons (go (car items) ()) tail)))))
(go x ()))
深度反转的应用将是:
(define x (list (list 1 (list 2 3) 4) 5 6 (list 7 8) 9 10)) (display x) (deep-reverse x)
((1 (2 3) 4) 5 6 (7 8) 9 10)
=> (10 9 (8 7) 6 5 (4 (3 2) 1))
你想要什么答案?(1(2 3)4)和(1(2(3 4))的深度反转是什么?我可以看到一种可能性:反转列表,在反转列表中((4 3)(2 1))
,在这种情况下,您只需要对反转列表进行递归调用。您想要什么答案?(1(2 3)4)和(1(2(3 4))的深度反转是什么?我可以看到一种可能性:反转列表,在反转列表中((4 3)(2 1))
,在这种情况下,您只需要对反转列表进行递归调用作业标记是,你不应该要求人们再使用它,但这只适用于列表中的一个级别的列表,对吗?对。你想一路往下看吗?家庭作业标签是,你不应该要求人们再使用它,但这只适用于列表中的一个级别的列表,对吗?对。你想一路下来吗?