我想获取列表的任意列表并“旋转”它。 也就是说,对于大小为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)
                                (list 'd 'e 'f)
                                (list 'g 'h 'i)))
          (list (list 'a 'd 'g)
                (list 'b 'e 'h)
                (list 'c 'f 'i)))

我在想list-ref将替换first / second / third但是我不太清楚这样做的最简洁方法。

知道必须有一种优雅的方法来做到这一点。 过去,我已经针对该问题做了一些微不足道的解决方案,这些解决方案都是针对特定领域的,但是我想针对一般情况解决此问题,将其存储在个人库中并解决该问题。 有任何提示或解决方案吗?

===============>>#1 票数:5 已采纳

它非常类似于zip并且您不必制作它,因为它已经在SRFI-1列表库中

(require srfi/1)
(zip '(a b c) '(d e f) '(g h I)) ; ==> ((a d g) (b e h) (c f i))

现在,将所有参数用作列表,然后应用apply:

(apply zip '((a b c) (d e f) (g h I)))
; ==> ((a d g) (b e h) (c f i))

并且,仅出于完整性考虑。 这是zip的定义方式:

(define (zip . lsts)
  (apply map list lsts))

  ask by BlackVegetable translate from so

未解决问题?本站智能推荐: