这不是我第一次尝试,但我总是设法找到另一条路线。这次我不想要任何“硬编码的替代品”,所以。。。请跟我谈谈。我从一个类似于ssnamex的选择部分的列表中选择(因此其长度可以变化)
由于列表的长度可能不同,我认为“递归”,但fast发现,虽然递归构建有点简单,但递归解构似乎完全是另一回事。(可以做到吗?)
到目前为止,我的最佳尝试是删除所有不是坐标的内容,但列表结构与原始列表相同,如下所示
- ;Not quite there yet!
- (defun keepcoords (L)
- (if (listp L)
- (if (and (atom (car L))
- (atom (cadr L))
- (atom (caddr L))
- )
- L
- (mapcar '(lambda (x)
- (keepcoords x)
- )
- L
- )
- )
- )
- )
- ;returns that....
- ((nil (nil (269.157 85.9418 0.0)) (nil (272.343 85.9418 0.0)) (nil (272.343 59.9463 0.0)) (nil (269.157 59.9463 0.0)))
- (nil (nil (273.021 84.9263 0.0)) (nil (274.851 84.9263 0.0)) (nil (274.851 83.3016 0.0)) (nil (273.021 83.3016 0.0)))
- (nil (nil (275.258 65.4297 0.0)) (nil (279.528 65.4297 0.0)) (nil (279.528 60.6233 0.0)) (nil (275.258 60.6233 0.0)))
- (nil (nil (280.206 72.2671 0.0)) (nil (283.596 72.2671 0.0)) (nil (283.596 69.5592 0.0)) (nil (280.206 69.5592 0.0))))
我需要的是得到一个只包含坐标的列表,就像这样
我知道我可以“硬编码”一个解决方案,该解决方案适用于(并且仅适用于)这种特定类型的列表,但我在这里的目标是制作一个函数,该函数可以只提取任意长度 和形态的列表的点坐标,递归似乎是实现它的唯一途径。我可怜的大脑现在坏了。我需要一些新的观点。请解开我的大脑 |