List 旋转列表列表
我想获取任意列表并“旋转”它。也就是说,对于大小为3x3的列表列表:List 旋转列表列表,list,racket,List,Racket,我想获取任意列表并“旋转”它。也就是说,对于大小为3x3的列表列表: #lang racket (require rackunit) (define (rotate-lol lol) (append (list (map first lol)) (list (map second lol)) (list (map third lol)))) (check-equal? (rotate-lol (list (list 'a 'b 'c)
#lang racket
(require rackunit)
(define (rotate-lol lol)
(append (list (map first lol)) (list (map second lol)) (list (map third lol))))
(check-equal? (rotate-lol (list (list 'a 'b 'c)
(list 'd 'e 'f)
(list 'g 'h 'i)))
(list (list 'a 'd 'g)
(list 'b 'e 'h)
(list 'c 'f 'i)))
我想列表参考
将取代第一个
/第二个
/第三个
,但我不太清楚最简洁的方法
我知道必须有一个优雅的方式来做到这一点。在过去,我对这个问题做了一些不雅观的解决方案,这些解决方案更针对特定领域,但我想解决一般情况,将其保存在个人库中,然后解决这个问题。有什么建议或解决方案吗?它非常像
zip
,您不必这样做,因为它已经在:
(需要srfi/1)
(zip)(abc)(def)(ghi);((a d g)(b e h)(c f i))
现在,要将所有参数作为您使用的应用列表,请执行以下操作:
(应用zip'((a b c)(d e f)(g h I)))
; ==> ((a d g)(b e h)(c f i))
为了完整起见。以下是如何定义zip
:
(定义(zip.lsts)
(应用地图列表(LST))
它非常像zip
,您不必制作它,因为它已经在:
(需要srfi/1)
(zip)(abc)(def)(ghi);((a d g)(b e h)(c f i))
现在,要将所有参数作为您使用的应用列表,请执行以下操作:
(应用zip'((a b c)(d e f)(g h I)))
; ==> ((a d g)(b e h)(c f i))
为了完整起见。以下是如何定义zip
:
(定义(zip.lsts)
(应用地图列表(LST))
真有趣。我在另一个环境中实现了zip,并用它解决了一个非常类似的问题。由于某种原因,apply
总是避开我的思维过程。。。非常感谢。真有趣。我在另一个环境中实现了zip,并用它解决了一个非常类似的问题。由于某种原因,apply
总是避开我的思维过程。。。非常感谢。这通常称为矩阵转置。例如,瞧。@JoshuaTaylor我知道有更好的方式来表达它。这就是为什么我在引号中加上“旋转”。这通常被称为矩阵转置。例如,瞧。@JoshuaTaylor我知道有更好的方式来表达它。这就是为什么我在引号中加上“旋转”。