【发布时间】:2017-04-24 18:48:28
【问题描述】:
例子
(trace '((1 2 3) (4 5 6) (7 8 9)))应计算为 15 (1+5+9)。 提示:使用map获得可以递归应用跟踪的较小矩阵。矩阵应该是平方的。
我试着做,但我似乎做不到,我试着先得到对角线。
define (diagonals m n)
(append
(for/list ([slice (in-range 1 (- (* 2 n) 2))])
(let ((z (if (< slice n) 0 (add1 (- slice n)))))
(for/list ([j (in-range z (add1 (- slice z)))])
(vector-ref (vector-ref m (sub1 (- n j))) (- slice j))))
有没有办法使用map 以非常简单的递归方式解决这个问题。
我试图这样解决它。
define (nth n l)
(if (or (> n (length l)) (< n 0))
(if (eq? n 0) (car l)
(nth (- n 1) (cdr l)))))
(+ (nth 3 '(3 4 5)) (nth 2 '(3 4 5)) (nth 3 '(3 4 5)))
但它也没有用。
【问题讨论】:
-
请将您的代码从评论移至问题并正确格式化。使用“编辑”按钮。
-
好的,我会这样做
-
谢谢。现在请修复括号和缩进并删除不必要的 cmets(我将删除我的)
-
你看,我不是lisp专业的,所以不擅长缩进
-
Emacs 可以按照我们期望的方式为您缩进代码 :-)