排序局部变量?是th
大家好。我需要一些帮助。我甚至不确定这是否可能,但我认为应该是这样。我仍然处于“我知道足够多的LISP,只是有点危险,但有点有用”的阶段我有一个LISP例程,它从用户那里收集5个变量(r1、r2、r3、r4、r5)。
(setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
(setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))
(if (= r2 0)(setq r3 0)(setq r3 (getint "\nEnter Third Rev Line Number use ZERO for NONE: ")))
(if (= r3 0)(setq r4 0)(setq r4 (getint "\nEnter Fourth Rev Line Number use ZERO for NONE: ")))
(if (= r4 0)(setq r5 0)(setq r5 (getint "\nEnter Fifth Rev Line Number use ZERO for NONE: ")))
我想对它们做的是,根据它们的值进行排序,将最高值放在首位,然后反向排序。
有人能对此有什么见解吗?提前谢谢! 看看(vl排序)它是一个相当简单的函数-大卫 谢谢大卫。我查找了vl排序的一些语法。。看起来应该足够简单! 嗯,我试着让它工作,但我似乎不能使它发生使用我的变量。
我有这样的想法:
(setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
(setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))
(setq r3 (getint "\nEnter Third Rev Line Number use ZERO for NONE: "))
(setq r4 (getint "\nEnter Fourth Rev Line Number use ZERO for NONE: "))
(setq r5 (getint "\nEnter Fifth Rev Line Number use ZERO for NONE: "))
(setq revs (vl-sort '(r1 r2 r3 r4 r5) '>))
(setq r1 (nth 0 revs)
r2 (nth 1 revs)
r3 (nth 2 revs)
r4 (nth 3 revs)
r5 (nth 4 revs))
当我尝试运行它时,我得到一个“错误:比较的参数类型错误:R2 R1”。就编写代码而言,这对我来说几乎都是猜测,所以任何人能帮我的都将不胜感激!
谢谢 通过使用quote定义列表,您可以阻止对他的项目进行评估:
(setq revs (vl-sort (list r1 r2 r3 r4 r5) '>))
当做
米尔恰 美好的谢谢
现在我需要做的就是找出如果其中一个值为零,如何使其工作。。。
现在获取“错误:错误参数类型:fixnump:nil”。。 按enter键可能会给你一个“nil”而不是“0”,这不一样
在Getint请求中按Enter键将返回nil如果要返回0,可以这样重新写入:
(mapcar '(lambda(a b)(set a b))
'(r1 r2 r3 r4 r5)
(vl-sort
(mapcar '(lambda(a)(cond ((getint (strcat "\nEnter " a "Rev Line Number use ZERO for NONE: ")))(0)))
'("First" "Second" "Third" "Fourth" "Fifth")
)
'>
)
)
更基本的用法是:
(initget 1)
(setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
(initget 1)
(setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))
(initget)使用位标志
基本值为:
1=非零
2=不为零
4=非负
so(initget 7):将强制输入大于0的正数
-大卫 谢谢,伙计们,我得试试。
我想我知道我遇到的问题。。在代码中,我告诉它对5个值进行排序,其中2或3个值可能最终为0。因此,在列表排序后,重复项被删除,如果我尝试从列表中拉出第4和第5个值,它们就不再存在了。。因此,当代码尝试运行时:
(setq r1 (nth 4 revs))。。该值基本上不再存在,因此返回“nil”值。我理解正确吗?
页:
[1]
2