乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 11|回复: 11

[编程交流] 排序局部变量?是th

[复制链接]

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:12:48 | 显示全部楼层 |阅读模式
大家好。我需要一些帮助。我甚至不确定这是否可能,但我认为应该是这样。我仍然处于“我知道足够多的LISP,只是有点危险,但有点有用”的阶段
 
我有一个LISP例程,它从用户那里收集5个变量(r1、r2、r3、r4、r5)。
 
  1. (setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
  2. (setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))
  3. (if (= r2 0)(setq r3 0)(setq r3 (getint "\nEnter Third Rev Line Number use ZERO for NONE: ")))
  4. (if (= r3 0)(setq r4 0)(setq r4 (getint "\nEnter Fourth Rev Line Number use ZERO for NONE: ")))
  5. (if (= r4 0)(setq r5 0)(setq r5 (getint "\nEnter Fifth Rev Line Number use ZERO for NONE: ")))

 
我想对它们做的是,根据它们的值进行排序,将最高值放在首位,然后反向排序。
 
有人能对此有什么见解吗?提前谢谢!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:20:00 | 显示全部楼层
看看(vl排序)它是一个相当简单的函数-大卫
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:24:18 | 显示全部楼层
谢谢大卫。我查找了vl排序的一些语法。。看起来应该足够简单!
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:33:36 | 显示全部楼层
嗯,我试着让它工作,但我似乎不能使它发生使用我的变量。
 
我有这样的想法:
  1.   (setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
  2. (setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))
  3. (setq r3 (getint "\nEnter Third Rev Line Number use ZERO for NONE: "))
  4. (setq r4 (getint "\nEnter Fourth Rev Line Number use ZERO for NONE: "))
  5. (setq r5 (getint "\nEnter Fifth Rev Line Number use ZERO for NONE: "))      
  6.    
  7.      (setq revs (vl-sort '(r1 r2 r3 r4 r5) '>))
  8.      (setq r1 (nth 0 revs)
  9.        r2 (nth 1 revs)
  10.        r3 (nth 2 revs)
  11.        r4 (nth 3 revs)
  12.        r5 (nth 4 revs))

 
当我尝试运行它时,我得到一个“错误:比较的参数类型错误:R2 R1”。就编写代码而言,这对我来说几乎都是猜测,所以任何人能帮我的都将不胜感激!
 
谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:39:16 | 显示全部楼层
通过使用quote定义列表,您可以阻止对他的项目进行评估:
 
  1. (setq revs (vl-sort ([color=red]list[/color] r1 r2 r3 r4 r5) '>))

 
当做
米尔恰
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:43:00 | 显示全部楼层
美好的谢谢
 
现在我需要做的就是找出如果其中一个值为零,如何使其工作。。。
 
现在获取“错误:错误参数类型:fixnump:nil”。。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:50:15 | 显示全部楼层
按enter键可能会给你一个“nil”而不是“0”,这不一样
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-6 08:53:56 | 显示全部楼层
 
在Getint请求中按Enter键将返回nil如果要返回0,可以这样重新写入:
  1. (mapcar '(lambda(a b)(set a b))
  2. '(r1 r2 r3 r4 r5)
  3. (vl-sort
  4.    (mapcar '(lambda(a)(cond ((getint (strcat "\nEnter " a "Rev Line Number use ZERO for NONE: ")))(0)))
  5.        '("First" "Second" "Third" "Fourth" "Fifth")
  6.    )
  7.    '>
  8. )
  9. )     
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:00:22 | 显示全部楼层
更基本的用法是:
 
 
  1. (initget 1)
  2. (setq r1 (getint "\nEnter First Rev Line Number use ZERO for NONE: "))
  3. (initget 1)
  4. (setq r2 (getint "\nEnter Second Rev Line Number use ZERO for NONE: "))

 
(initget)使用位标志
 
基本值为:
 
1=非零
2=不为零
4=非负
 
so(initget 7):将强制输入大于0的正数
 
-大卫
回复

使用道具 举报

12

主题

40

帖子

28

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 09:03:11 | 显示全部楼层
谢谢,伙计们,我得试试。
 
我想我知道我遇到的问题。。在代码中,我告诉它对5个值进行排序,其中2或3个值可能最终为0。因此,在列表排序后,重复项被删除,如果我尝试从列表中拉出第4和第5个值,它们就不再存在了。。因此,当代码尝试运行时:
  1. (setq r1 (nth 4 revs))
。。该值基本上不再存在,因此返回“nil”值。我理解正确吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 09:30 , Processed in 0.632347 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表