菜卷鱼 发表于 2015-5-11 17:35:05

语句更换表达

本帖最后由 菜卷鱼 于 2015-5-11 17:39 编辑


(setq a '(1 2 3 4 ))
(setq b '(5 6 7 8 ))

要得到结果 ((1 5)(4 8))
实际上a 是我取得点集合的全部X坐标,b是我取得点集合的全部y坐标,
我想取对角点。
我目前用的方式以下的代码,句子写出来感觉难看;

(list(list (apply 'min a)(apply 'min b))(list (apply 'max a)(apply 'max b)))

测试用以下的代码也能达到一样的效果,但是感觉有点重复繁琐;

(list(mapcar '(lambda(x) (apply 'min x)) (list a b))
       (mapcar '(lambda(x) (apply 'max x)) (list a b))
)


还有别的更简单更快的表达方式吗?最好是用匿名函数的。

Andyhon 发表于 2015-5-11 20:59:45

另请参考 ACET 函数
acet-ent-geomextents
acet-geom-ss-extents

xyp1964 发表于 2015-5-12 13:08:11

(setq c (mapcar '(lambda (x y) (list x y)) a b))
(setq d (list (car c) (last c)))

vectra 发表于 2015-5-12 14:24:47

我觉得

(list(list (apply 'min a)(apply 'min b))(list (apply 'max a)(apply 'max b)))

这样的代码,不仅不难看,反而是最简单易懂的。。

wzg356 发表于 2015-6-30 14:04:41

还要追求观感质量呀?

lijiao 发表于 2015-6-30 15:31:00

本帖最后由 lijiao 于 2015-6-30 16:03 编辑

(setq ab (mapcar 'vl-sort (list a b) '(< <)))
(list (mapcar 'car ab) (mapcar 'cadr ab))

(mapcar ''((x) (mapcar x ab)) '(car cadr))

masterlong 发表于 2015-6-30 21:43:21

楼上的这个双单引号用得不错

菜卷鱼 发表于 2018-8-25 17:25:26

(mapcar '(lambda(x) (list(apply 'min x)(apply 'max x))) (list a b))
页: [1]
查看完整版本: 语句更换表达