乐筑天下

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

[编程交流] Autolisp中包含哪些项目

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:33:37 | 显示全部楼层 |阅读模式
你好
 
Autolisp中的哪些项被视为符号?
 
谢谢
谢伊
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-5 23:47:51 | 显示全部楼层
这与你的另一条线索有关:
这是因为Lisp程序。在Lisp中具有名称的所有内容都是符号,并且不能为符号指定任何内容-至少在AutoLisp中不能。因此,你可以“认为”一些是常数,就像几乎所有人一样-但AutoLisp本身并没有这样做-所有的t/nil/pi/pause/等等都是与任何其他命名符号相同的符号。甚至可以将defuns和内置函数分配给。因此,这是危险的,因为你可以给像PI这样的东西分配另一个值,但这也是有利的,因为你可以在不受语言本身干扰的情况下做这样的事情(如果你想在那里有一些并行宇宙的PI值,你可以这样做)。 
Lisp的这一方面与称为弱类型的争议点有关,这意味着任何“变量”都可以在任何时候分配任何类型的数据/代码。强类型(与许多其他语言一样)迫使程序员在同一变量中仅使用类似类型的值,例如,在C中以int类型启动变量,然后尝试为其分配字符串,这在编译时只会出错。这有好有坏,在像C这样的语言中,编译器会在编译和运行时分配时为您进行类型检查(如果您启用此选项),在Lisp中,您需要在您认为必要时进行检查。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:53:05 | 显示全部楼层
 
当我尝试时:
 
  1. (setq T "true")

 
我收到警告说:
 
分配给受保护符号
T
输入中断循环?
 
如果我按yes,T仍受保护,如果no,T被重新定义
 
这个断环是什么?
 
谢谢
谢伊
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:06:38 | 显示全部楼层
 
该行为由Visual LISP IDE中的以下设置控制,该设置位于“工具”>“环境选项”>“常规选项”下:
 
003337ewp32taotgzwppzo.png
 
但是,不建议重新定义受保护的符号,因为AutoCAD提供的AutoLISP程序(如Express Tools程序)将依赖于这些包含特定值的受保护符号。
 
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 00:12:30 | 显示全部楼层
我总是觉得符号是人类和机器之间的“桥梁”,所以我们不用写无意义的数字来表达我们想要电脑做什么,而是用这些符号。我在挖掘它,因为帮助文档总是提到诸如符号、项目、原子之类的术语,而且很容易丢失。
 
根据autolisp帮助文档,您如何区分或定义符号、项目和原子的实体解释?
 
谢谢
谢伊
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 00:22:50 | 显示全部楼层
将符号视为数据/代码的容器-它就像你给某个东西起的名字,以便你以后可以引用它。
 
Item实际上不是一个Lisp的东西,它是一种在英语中指代事物集合中的一个事物的方式。我们通常用它来表示列表中的一个位置。
 
Atom是一种Lisp语言,指符号内的数据,其中数据是一个“原子”值,即不能拆分为单独的部分。E、 整数值是一个原子,但列表不是。有一个地方严格来说是不正确的:字符串。根据AutoLisp,字符串是一个原子,但可以使用substr拆分它。在大多数其他Lisp中,字符串是序列的特定版本,列表和数组也是如此。进一步类推:一个分子类似于一个数组或一个字符串(即原子的刚性集合-字符串是原子字符的集合),列表则不那么刚性(可能像混合物而不是分子)。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 00:27:09 | 显示全部楼层
 
 
现在一切都变得更清楚了
谢谢
谢伊
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:36:37 | 显示全部楼层
这是来自autodesk exchange的所有常规autolisp数据类型。不是特别的符号,但你可以看到它们是多么重要,是主要的数据类型之一。
 
VLA对象
 
图形中的对象可以表示为Visual LISP ActiveX®(VLA)对象,这是Visual LISP引入的一种数据类型。使用ActiveX函数时,必须引用VLA对象,而不是由诸如entlast之类的函数返回的ename指针。有关使用ActiveX对象的信息,请参阅在AutoLISP中使用ActiveX对象。
 
 
符号和变量
 
 
AutoLISP使用符号来引用数据。符号名称不区分大小写,可以由任何字母数字和符号字符序列组成,以下字符除外:
 
受符号名称限制的字符
(
(开括号)
)
(右括号)
.
(期间)
'
(撇号)
"
(引号符号)
;
(分号)
 
 
符号名称不能仅由数字字符组成。
 
从技术上讲,AutoLISP应用程序由符号或常量值组成,例如字符串、实数和整数。为了清楚起见,本指南使用术语符号来指代存储静态数据的符号名称,例如内置和用户定义的函数。术语变量是指存储程序数据的符号名。以下示例使用setq函数将字符串值“this is a string”分配给str1变量:
 
 
 
 
 
_$ (setq str1“这是astring”)“这是一个字符串”
 
帮助自己和其他需要阅读代码的人。为程序符号和变量选择有意义的名称。
 
 
描述器
 
文件描述符是指向由AutoLISP open函数打开的文件的指针。open函数将此指针作为字母数字标签返回。将文件描述符作为参数提供给读取或写入文件的其他AutoLISP函数。
以下示例打开myinfo。用于读取的dat文件。open函数返回文件描述符:
_$ (setq文件1(打开“c:\\myinfo.dat”“r”))
在本例中,文件描述符存储在file1变量中。
文件保持打开状态,直到在AutoLISP程序中显式关闭。关闭函数关闭文件。以下代码关闭文件描述符存储在file1变量中的文件:
 
_$ (关闭文件1)无
 
 
 
 
实体名称
 
图元名称是指定给图形中对象的数字标签。它实际上是指向AutoCAD维护的文件的指针,可用于查找对象的数据库记录及其矢量(如果显示)。AutoLISP函数可以引用此标签,以允许选择以各种方式处理的对象。在内部,AutoCAD将对象称为实体。
以下示例使用entlast函数获取输入到图形中的最后一个对象的名称。
_$ (最后一个)
指定给图形中对象的图元名称仅在当前编辑任务期间有效。下次打开图形时,AutoCAD会为对象指定新的图元名称。您可以使用对象的句柄将其从一个编辑会话引用到另一个编辑会话;有关使用句柄的信息,请参见实体句柄及其用途。
 
 
 
选择集
 
选择集是一个或多个对象(实体)的组。可以使用AutoLISP例程以交互方式向选择集添加对象或从中删除对象。
以下示例使用ssget函数返回包含图形中所有对象的选择集。
 
 
_$ (ssget“X”)列表
 
AutoLISP列表是一组由空格分隔并用括号括起来的相关值。列表提供了一种存储大量相关值的有效方法。AutoCAD将三维点表示为三个实数的列表。
列表示例有(1.0 1.0 0.0),(“this”“that”“other”)和(1“ONE”)。
 
 
 

 
字符串是由引号包围的一组字符。在带引号的字符串中,反斜杠(\)字符允许包含控制字符(或转义码)。在AutoLISP表达式中显式使用带引号的字符串时,该值称为文字字符串或字符串常量。
有效字符串的示例为“字符串1”和“\n输入第一点:”。
 
 
 
雷亚尔
 
实数是包含小数点的数字。介于-1和1之间的数字必须包含前导零。实数以双精度浮点格式存储,提供至少14位有效精度。请注意,VLISP不会显示所有有效数字。
实数可以用科学记数法表示,它有一个可选的e或e,后跟数字的指数(例如,0.0000041与4.1e-6相同)。3.1、0.23、-56.123和21000000.0等数字是有效的AutoLISP实数。
 
 
整数
 
整数是不包含小数点的整数。AutoLISP整数是32位有符号数,其值范围为+2147483647到-2147483648。(然而,请注意,getint函数只接受范围为+32767到-32678的16位数字。)在AutoLISP表达式中显式使用整数时,该值称为常量。2、-56和1200196等数字是有效的AutoLISP整数。
如果输入的数字大于允许的最大整数(导致整数溢出),AutoLISP会将整数转换为实数。但是,如果对两个有效整数执行算术运算,并且结果大于允许的最大整数,则所得数字将无效。以下示例说明了AutoLISP如何处理整数溢出。
最大正整数值保留其指定值:
_$ 21474836472147483647
如果输入的整数大于允许的最大值,AutoLISP将以实数形式返回该值:
_2147483648美元2.14748e+009
涉及两个有效整数但导致整数溢出的算术运算产生无效结果:
_$ (+ 2147483646 3)-2147483647
在本例中,结果显然无效,因为两个正数相加会产生负数。但请注意以下操作如何产生有效结果:
_$(+2147483648 2)2.14748e+009
在本例中,AutoLISP将2147483648转换为有效实数,然后向数字中添加2。结果是一个有效的实数。
最大负整数值保留其指定值:
_$ -2147483647-2147483647
如果输入的负整数大于允许的最大负值,AutoLISP将以实数形式返回该值:
_$-2147483648-2.14748e+009
以下操作成功结束,因为AutoLISP
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:41 , Processed in 1.190602 second(s), 70 queries .

© 2020-2025 乐筑天下

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