明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 926|回复: 10

[讨论] (princ)之一个神奇的变量名:“空”

  [复制链接]
发表于 2024-9-4 02:30:28 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2024-9-4 09:40 编辑

昨天发现一个特别有意思的提问帖lisp代码最后都写一句”(princ)“,它的作用是什么?,仅仅讨论一个(princ)居然跟出了三十多个回复,可惜最后提问者依然不明白,单独开贴引申一下,
长久以来,绝大多数人都认为(princ)没有返回值,为什么会没有返回值?不觉得奇怪吗?答案其实是有返回值的,返回值是一个符号(亦或通俗的称为变量名,如同'a 'b 'abcd之类),这个符号没有名字,称为空符号。
看一下面的代码,乍一看似乎没有使用任何变量,但是你再细看,会发现(princ)居然就是一个变量,正常变量都是有名字的,但是这个变量它没有名字


(set (princ)"我是一个神奇的变量")
(princ(strcat"这是一个非常特别的变量,它的名字为空:它的值为:"(eval(princ))))



第一句代码是为一个空名变量进行赋值,
第二句代码是使用这个变量,从而输出"这是一个非常特别的变量,它的名字为空:它的值为:我是一个神奇的变量"
可以用(vl-symbol-name(princ))直观的看到它的“名字”

还可以拿它来作为函数,简直不要太神奇

;;定义空名函数
(set (princ)(lambda(a)(princ"\n这是一个空名函数\n")(1+ a)))

;;调用空名函数
((eval(princ))5)

评分

参与人数 7明经币 +7 收起 理由
muwind + 1 很给力!
tomonkey239 + 1 海大师
magicheno + 1
Bao_lai + 1 很给力!
tanshun_ysjkd + 1
vink8023 + 1 海哥出品绝对精品
自贡黄明儒 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-4 05:35:14 | 显示全部楼层
高,一个字,真高手
发表于 2024-9-4 07:28:02 | 显示全部楼层
(set (princ)"我是一个神奇的变量")
(vl-symbol-value (princ))====>"我是一个神奇的变量"
发表于 2024-9-4 08:25:47 来自手机 | 显示全部楼层
海哥可以的()
发表于 2024-9-4 08:29:57 | 显示全部楼层


关于princ 返回值这个、函数说明里面有提到、之前没注意、
今天看海哥一解释就懂了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-9-4 08:55:53 | 显示全部楼层
感谢海哥指点迷津
发表于 2024-9-4 10:55:38 | 显示全部楼层
大海哥牛逼
发表于 2024-9-4 10:56:25 | 显示全部楼层
太高级了~海哥牛
发表于 2024-9-5 22:49:57 | 显示全部楼层
都是大佬,比我研究的深,我只用了setq 尝试获取 但是没有匹配到任何东西  那个空符号 我一直没搞清楚
发表于 2024-9-5 22:59:24 | 显示全部楼层
本帖最后由 baitang36 于 2024-9-5 23:05 编辑

从底层研究了一下,(princ)的返回值是as:*noval*,这是一个保留符号,可以用tranf转化成普通符号。它的值是本身,它的名是空字符串。
可以自己写一个没有回显的函数,只要让它返回as:*noval*

  1. (load "c:/00/trf_9.fas")
  2. (tranf "as:*noval*")
  3. (defun c:tt ()
  4.   (princ "hello world !")
  5.   as:*noval*
  6. )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 很给力!

查看全部评分

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-30 10:25 , Processed in 0.186414 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表