Small Fish 发表于 2022-7-6 14:25:54

正列表值

您好,我如何将列表中的所有数字转换为正值?
我猜我需要使用“abs”和“apply”,但不确定是什么组合。
现在,我都在谷歌上寻找一种方法来做到这一点。
有人知道吗。。。谢谢
 
 
例如:
 
 
(setq lista’(-20.4-10.0)(20.0-50.0)(58.0-60.6)))
 
转换为:
 
(setq newlista’((20.4 10.0)(20.0 50.0)(58.0 60.6)))

ronjonp 发表于 2022-7-6 14:39:52

这应该是你想要的
 
(mapcar(函数(λ(n)(mapcar’abs n)))lista)

Small Fish 发表于 2022-7-6 14:46:26

谢谢,这就成功了。

ronjonp 发表于 2022-7-6 14:57:57

 
很乐意帮忙

alanjt 发表于 2022-7-6 15:14:31

如果你使用这样的东西,你的列表看起来是什么并不重要。您可以在包含或不包含嵌入列表的列表上运行它。
即:(列表2 2(列表3-3“B”E)(列表3-3-2“G”))将变为(2 2(3 3“B”E)(3 3 2“G”))
;;;Convert all values in list and sublists to positive numbers
;;;#List - list with values to convert
;;;Alan J. Thompson, 06.14.09
(defun AT:AbsList (#List)
(mapcar
   '(lambda (x)
      (cond
      ((vl-consp x) (AT:AbsList x))
      ((member (type x) (list 'INT 'REAL)) (abs x))
      (T x)
      ) ;_ cond
    ) ;_ lambda
   #List
) ;_ mapcar
) ;_ defun

Lee Mac 发表于 2022-7-6 15:20:16

很好的递归Alan。。。你在沼泽地呆得太久了。。

alanjt 发表于 2022-7-6 15:30:15

哈哈,我直到做完才意识到自己做了什么。
页: [1]
查看完整版本: 正列表值