燃烧 发表于 2011-11-6 13:30:22

listp和numberp函数怎么用的啊

(defun 3dpoint->2dpoint (3dpt)
(if (listp 3dpt)
    (if
(progn
      ((numberp (car 3dpt))
   and
   (numberp (cadr 3dpt))
   and
   (numberp (caddr 3dpt))
))
      (list (float (car 3dpt)) (float (cadr 3dpt)))
    )
)
)
我写了个三维点转二维点的lisp,可是不能用,请大家帮忙看看错在哪里了!

xshrimp 发表于 2011-11-6 14:04:07

本帖最后由 xshrimp 于 2011-11-6 14:05 编辑

按照你的理解应该是这样的

(defun 3dpoint->2dpoint (3dpt)
(if
    (and
      (listp 3dpt)
      (numberp (car      3dpt))
      (numberp (cadr    3dpt))
      (numberp (caddr 3dpt))
    )
    (list (float (car 3dpt)) (float (cadr 3dpt)))
)
)

燃烧 发表于 2011-11-6 16:26:42

非常感谢!呵呵!

燃烧 发表于 2011-11-6 16:29:47

非常感谢!呵呵!

caoyin 发表于 2011-11-6 16:33:25

换个思路,
(defun 3dpoint->2dpoint (3dpt)
(if (apply 'and (mapcar 'numberp 3dpt))
    (mapcar '+ 3dpt '(0. 0.))
))
页: [1]
查看完整版本: listp和numberp函数怎么用的啊