gpt4 book ai didi

list - 转置 Racket 中的矩阵(列表的列表

转载 作者:行者123 更新时间:2023-12-02 21:29:52 25 4
gpt4 key购买 nike

我在 Racket 中得到了一个列表列表,并且必须转置它们。

(: transpose ((list-of(list-of %a)) -> (list-of (list-of %a))))

(check-expect (transpose (list (list 1 2 3)
(list 4 5 6)))
(list (list 1 4)
(list 2 5)
(list 3 6)))

(define transpose
(lambda (xs)
(cond
((empty? xs)empty)
((pair? xs)(make-pair (make-pair (first(first xs)) (make-pair (first(first(rest xs)))empty)) (transpose (rest(rest xs))))))))

这是我目前的代码。我认为问题出在递归调用中(如果我错了,请纠正我)。

实际结果是(list (list 1 4))。其余的似乎有点被忽略。

如果有人知道这个问题,或者有提示,这对我真的很有帮助。

最佳答案

转置最简单的定义是:

(define (transpose xss)
(apply map list xss))

它为什么有效?

  (apply map list '((a b) (d e))
= (apply map List '((a b) (d e)) ; use List rather than list
= (map List '(a b) '(d e))
= (list (List 'a 'd) (List 'b e))
= '((a d) (b e))

这里List用大写字母拼写只是为了显示哪个list是由用户给出的以及哪个是由map生成的。

这是一个不太“聪明”的解决方案。它使用的是第一列矩阵成为转置矩阵中的第一行。

(define transpose
(lambda (xss)
(cond
[(empty? xss) empty]
[(empty? (first xss)) empty]
[else (define first-column (map first xss))
(define other-columns (map rest xss))
(cons first-column
(transpose other-columns))])))

关于list - 转置 Racket 中的矩阵(列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com