gpt4 book ai didi

matrix - 递归 lisp 替换元素迷宫求解器

转载 作者:行者123 更新时间:2023-12-01 14:45:24 25 4
gpt4 key购买 nike

定义矩阵后:

(setq matriz '((1 0 0 0 0 0)
(1 1 0 0 0 0)
(0 1 1 1 0 0)
(0 0 0 1 0 0)
(0 0 0 1 1 0)
(0 0 0 0 1 1)))

我已经做了一个根据位置(行和列)获取数字的函数但是现在我想做一个函数来根据位置替换矩阵中的数字,但我在做这件事时遇到了麻烦。可以说我想替换对应于 (0 0 0 1 0 0) 中的 1 的位置 (3 3) 我只是不知道该怎么做。只能使用递归函数什么意思没有循环。我正在工作的是迷宫求解器 希望得到一些帮助,谢谢 :=)

: 编辑部分这是我目前所拥有的

(setq matriz '((1 0 0 0 0 0)(1 1 0 0 0 0)(0 1 1 1 0 0)(0 0 0 1 0 0)(0 0 0 1 1 0)(0 0 0 0 1 1)))


(defun path(i j)
(list (list (+ i 1) j)
(list (- i 1) j)
(list i (+ j 1))
(list i (- j 1))
))

(defun validsons (lf mat)
(cond
((null lf) nil)
((eq (devposmat (caar lf) (cadar lf) mat) 1) (cons (car lf) (validsons (cdr lf) mat)))
(t (validsons (cdr lf) mat))
)
)

(defun Devposicao(i lista)
(cond
((null lista) nil)
((< i 0) nil)
((= i 0) (car lista))
(t (Devposicao (- i 1) (cdr lista)))))

(defun DevPosMat(i j lista)
(Devposicao j (Devposicao i lista)))

;显示可用路径(仅1s)

(defun rightpath(i j mat)
(validsons (path i j) mat)
)

;所以你看到的是正确的矩阵而不是列表

(defun writematrix(Mat)
(cond
((null Mat) nil)
(t (progn
(print (car Mat))
(writematrix (cdr Mat))))
)
)

;这就是我想要替换的东西

(defun changenumber (i j matriz)
(cond
((null matriz) nil)
((< i 0) nil)
((= i 0) (dec j (car matriz)))
(t (changenumber (- i 1) j (cdr matriz)))))
(defun dec (pos l)
(cond
((null l) nil)
((= pos 0) (cons (- (car l) 1) (cdr l)))
(t (cons (car l) (dec (- pos 1) (cdr l))))))

所以我可以使用 rightpath 向前移动并查看我可用的路径,但我只需要编辑我之前所在的位置,这样我就不会继续到我之前的位置。对不起,如果我以错误的方式发布了一些东西,我不习惯。

最佳答案

不要这样做...

Common Lisp 带有多维数组,用列表代替矩阵是疯狂的。

(defparameter *matrix*
(make-array '(6 6)
:element-type 'bit
:initial-contents
'((1 0 0 0 0 0)
(1 1 0 0 0 0)
(0 1 1 1 0 0)
(0 0 0 1 0 0)
(0 0 0 1 1 0)
(0 0 0 0 1 1))))
(setf (aref *matrix* 3 3) 1)

(参见 make-array)

...除非被迫

如果一个疯狂的教授要求你使用列表,你可以使用像

这样的东西
(setf (car (nthcdr (nth matrix i) j)) 1)

(参见 nthnthcdr)。

如果您被禁止使用这些函数并且需要编写您自己的递归 setter ,请说明清楚并展示您的工作(因为我们现在处于疯狂限制的境界,请同时说明您的矩阵是否应该是不可变的)。

关于matrix - 递归 lisp 替换元素迷宫求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16900341/

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