首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Common Lisp中的中缀符号宏

中缀符号宏是Common Lisp中的一种宏,用于定义自定义的中缀操作符。在Common Lisp中,通常使用前缀或后缀符号来表示操作符,例如(+ 1 2)表示加法操作。但是,有时候使用中缀操作符更直观和易读,例如1 + 2

中缀符号宏允许开发者自定义中缀操作符,并定义它们的行为。通过使用中缀符号宏,可以使代码更接近自然语言的表达方式,提高代码的可读性和可维护性。

中缀符号宏的定义通常包括两个部分:宏定义和操作符定义。宏定义使用defmacro宏来定义一个宏,指定操作符和操作数的形式。操作符定义使用set-macro-character函数来定义操作符的行为。

以下是一个示例中缀符号宏的定义:

代码语言:lisp
复制
(defmacro infix (operator &rest operands)
  `(,operator ,@operands))
  
(set-macro-character #\+ 'infix)

在上面的示例中,我们定义了一个名为infix的中缀符号宏,它接受一个操作符和任意数量的操作数。宏展开后,会将操作符和操作数组合成一个列表,并返回。

使用中缀符号宏,我们可以编写类似自然语言的代码:

代码语言:lisp
复制
(1 + 2)

上述代码将展开为(infix + 1 2),最终返回结果为3

中缀符号宏在某些情况下可以提高代码的可读性和可维护性,但过度使用中缀操作符可能会导致代码难以理解。因此,在使用中缀符号宏时,需要权衡代码的可读性和可维护性。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Clojure与LispClojure与Lisp

觉得必须实现共同需要一个方法,使计算机能够处理链表符号数据,允许语言处理、信息存入和检索、定理证明过程机器化。IBM是首先对人工智能开发有兴趣商业机构之一。...1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...7 符号(symbol)类型 符号实际上是一种指针,指向储存在哈希表字符串。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp语法; 在编译期运行代码,则是Lisp工作基础; 在运行期编译代码,使得Lisp可以在Emacs这样程序,充当扩展语言(extension...Lisp无所不包,它既可能是某样表达式缩略形式,也可能是一种新语言编译器。如果你想真正地理解Lisp语言,或者想拓宽你编程视野,那么你必须学习

1.8K30

Java变量,替换详解。

群友在微信群讨论一个话题,有点意思,特拿出来分享一下。 输出true false 来看下面这段程序,和群友分享大致一样。...首先来理解下变量: Java,一个用final定义变量,不管它是类型变量,只要用final定义了并同时指定了初始值,并且这个初始值是在编译时就被确定下来,那么这个final变量就是一个变量。...编译器会把程序所有用到该变量地方直接替换成该变量值,也就是说编译器能对变量进行替换。...final String a = "hello"; final String b = a; final String c = getHello(); a在编译期间就能确定下来,而b、c不行,所以a是变量...所以,再回到上面的程序,finalWorld2和finalWorld4是final定义,也是在编译期间能确定下来,所以它能被替换,编译器就会让finalWorld2和finalWorld4指向字符串池中缓存字符串

3.6K50

Excel$符号妙用

Excel 使用过程,不知道你有没有用到过 $ ,如果从来都没有用到过,可能代表你修为还不够深,来看看为什么这么说。 场景1....这样好像每次都需要手动计算问题总计结果,然后修改辅助列值,不够智能; ② 总计用sum函数不用手工计算结果? 占比=B2/SUM(B2:B6) ?...多列VLOOKUP 假设现在要将每个班成绩汇总到年级花名册,每个班上报成绩,学生编号是没有顺序,而年级花名册中学生编号是从小到大排列,此时你可能需要用到VLOOKUP函数。 ? ?...本方法只书写一次公式,就得到了想要结果,效率很赞。...总结 excel每个单元对应一个编号,其中字母代表列号,数字代表行号,在行号或者列号前添加$代表锁定行或者锁定列,在一些场景可以起到事半功倍效果,怎么样,你学到了吗?

1.9K30

Linux符号用法

.“|”管道符用法 方式:command1 | command2 上一条命令输出,作为下一条命令参数传入 3.“&”符号用法 方式:command1 & &放在启动参数后面表示设置此进程为后台进程...4.“&&”符号用法 逻辑与功能 方式:command1 && command2 [&& command3 ...] shell 在执行某个命令时候,会返回一个返回值,该返回值保存在 shell 变量...。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0数,返回值在0-255间),表示执行失败。...shell 提供了 && 和 || 来实现命令执行控制功能,shell 将根据 && 或 || 前面命令返回值来控制其后面命令执行。 命令之间使用 && 连接,实现逻辑与功能。....“||”符号用法 逻辑或功能 方式:command1 || command2 [|| command3 ...] 只有在 || 左边命令返回假(命令返回值 $?

3.4K20

#和##用法

printf(STR(vck)); // 输出字符串"vck"     printf("%d   ", CONS(2,3)); // 2e3 输出:2000     return 0;   }   二、当参数是另一个时候...  需要注意是凡定义里有用'#'或'##'地方参数是不会再展开.   1, 非'#'和'##'情况   #define TOW (2)   #define MUL(a,b) (a*b)  ...printf("%d*%d=%d   ", TOW, TOW, MUL(TOW,TOW));   这行会被展开为:   printf("%d*%d=%d   ", (2), (2), ((2)*(...加多一层中间转换.   加这层用意是把所有参数在这层里全部展开, 那么在转换那一个(_STR)就能得到正确参数.  ...第二层: --> ___ANONYMOUS1(static int, _anonymous, 70);   第三层: --> static int _anonymous70;   即每次只能解开当前层

1.1K20

python@符号作用

'@'符号用作函数修饰符是python2.4新增加功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。也就是说@A def f(): 是非法。...d.addCallback(ErrorBack)         reactor.callLater(0.5,reactor.stop)         return "stop" 上述内容来自于Firefly框架...自补2 我们知道,Python并没有提供直接接口支持,但是接口技术又是现代软件设计重要技术,借助于它可以极大地减小软件模块间耦合度。...具体内部细节在此不展开了,直接上代码: #其他省略 from zope.interface import implementer #利用这些zope.interfaceimplementer等技术,..._checkLoop() 其中,接口IReactorFDSet部分代码如下(接口中只是简单地声明函数,而且注意成员函数参数没有上面的self): class IReactorFDSet(Interface

3.5K30

聊聊Swift

聊聊Swift ,Macros是一种常见编程技术,传统C语言中,即包含了功能。这种功能,简单来说是在代码预编译阶段进行静态替换,是一种非运行时特性。...但这也有一些缺陷,相比与C语言,Swift定义非常抽象,实现复杂,不太利于开发者进行理解。...,以上面的声明为例,MakeStatic作用是会生成一个静态变量,因此会在原代码中新增符号,但是变量名称是由参数决定,因此需要将names参数设置为arbitrary,表示要生成符号是不定。...2 overloaded 对原符号重载 3 prefixed(xxx) 增加前缀 4 suffixed(xxx) 增加后缀 5 arbitrary 动态符号名称 附加声明 附加使用@attached...,因为我们同时要对协议进行实现,会引入新符号,因此需要names参数也指明。

17010

Rust过程

x变量是一个表达式(用x:expr标记),所以在展开后它知道如何正确处理,会将其展开为((1 + 1) * (1 + 1))。 然而这只是书本上常见简单用法。...对于编程,Rust中提供了几种过程库操作支持,即: 1、Syn 它是基于TokenStream一种语法分析过程,它并不很强大,需要自定义扩展一些,比如Rust函数和闭包等。...过程(Procedure Macro)是Rust一种特殊形式,它将提供比普通更强大功能。方便起见,本文将Rust由macro_rules!定义称为规则以示区分。...编译器在编译一段程序时,会首先将输入文本转换成一系列Token(标识符、关键字、符号、字面量等),同时忽略注释(文档注释除外)与空白字符等。 例如println!...在展开过程,遇到派生时,会将整个结构体(或enum、union)展开成TokenStream作为派生函数输入,然后将其输出TokenStream附加到结构体后面,再继续作语法分析。

2.4K30

Lisp本质(The Nature of Lisp)学习思考

大体上, 符号相当于C++或Java语言中标志符, 它名字可以用来访问变量值(例如currentTime, arrayCount, n, 等等), 差别在于, Lisp符号更加基本。...Lisp函数是一种数据类型, 和整数, 字符串, 符号等等一样。一个函数并不必然有一个名字, 这和C++或者Java语言情形很不相同。在这里函数自己代表自己。...例如, 上面曾经将过C求三次方, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: 在Common Lisp, 此处单引号应当是反单引号..., 意思是对表不求值, 但可以对表某元素求值, 记号~表示对元素x求值, 这个求值记号在Common Lisp应当是逗号。...这里作者所用记号是自己发明一种Lisp方言Blaise, 和common lisp略有不同, 事实上, 发明方言是lisp高手独有的乐趣, 很多狂热分子都热衷这样做。

1.7K60

shell脚本$符号意义

// shell脚本$符号意义 // 今天是远程办公第4天,渐渐找到了一点在家办公节奏了,改了几个shell脚本,在改动过程,发现还有一些知识点需要巩固,这里写出来,加深下印象。...关于$符号,大家肯定都不陌生,在shell脚本,$作用还是比较大多,这里将所有的$组合都列出来,大家可以看下效果。 $组成命令大概有下面几个: $0,$1...$?,$!...结果是0 可以看到,第一次运行ls -l a.txt时候,由于我们目录没有a.txt这个文件,所以返回是1,第二次由于test.sh文件是存在,所以返回结果是0 3 $$ $$指的是脚本运行的当前进行...,脚本运行完会睡眠10s,脚本打印出来了值60658,此时我们查看当前脚本进程号,发现子进程进程id是60658 4 $*和$@ 这两个放在一起,主要是因为他们都代表引用所有参数,单独打印出来结果...反应是脚本某个命令进程号。

4.1K10

为什么Lisp语言如此先进?(译文)

符号(symbol)类型。符号实际上是一种指针,指向储存在哈希表字符串。所以,比较两个符号是否相等,只要看它们指针是否一样就行了,不用逐个字符地比较。   8....在读取期运行代码,使得用户可以重新调整(reprogram)Lisp语法;在编译期运行代码,则是Lisp工作基础;在运行期编译代码,使得Lisp可以在Emacs这样程序,充当扩展语言(extension...Lisp无所不包,它既可能是某样表达式缩略形式,也可能是一种新语言编译器。如果你想真正地理解Lisp语言,或者想拓宽你编程视野,那么你必须学习。...就我所知,(采用Lisp语言定义)目前仍然是Lisp独有的。一个原因是为了使用,你大概不得不让你语言看上去像Lisp一样古怪。...、到处都是bug、运行速度很慢Common Lisp实现。"

1.2K60

linux$符号基础用法总结

#1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@azfdbdfsdf230lqdg1ba91 ~]# $符号草集...目标 符号在linux系统有着很多很重要作用,特别是在编写bash脚本时候,随处可见身影。...am skyler" [root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "i am skyler" ] -bash: [: 参数太多 这里解析下[],[]是条件判断符号...输出结果,0表示执行成功,非零值表示出错 ${}用于区分变量边界,明确告诉程序要取哪个变量值 如下实例,不加{}程序无法判断ab $abc哪个是变量,无法解析 [root@izbp10lqlgy2g31s41bt94z...127 $() 等同于使用双引号作用 略 $[] 表达式计算 此时[]不是用于判断式场景,[]作为判断式一般用于bash脚步if while等条件语句 [root@izbp10lqlgy2g31s41bt94z

6K30

TSJS特殊符号用法(?!)、?.、??、??

之前在学习C#时候(7年事情了),依稀记得有  ??、 ?、 ?: 、?.、?[ ] 一堆符号,记得脑壳疼,没有想到现在js ts 也带上了 C# ??、 ?、 ?.、?...c”形式按“a??(b??c)”计算。  NULL检查运算符(?.) 如果对象为NULL,则不进行后面的获取成员运算。 在C# 6.0,引入了一个 ?. 运算符,需要注意是,由于"?....:) ES6 特殊符号用法  ?....: 表示强制解析(告诉typescript编译器,这里一定有值),常用于vue-decorator@Prop 参考文章: ts 特殊符号用法 https://blog.csdn.net/qq_33576343...含义以及用法说明 https://blog.csdn.net/lzfengquan/article/details/120302244 转载本站文章《TS/JS特殊符号用法(?/!)、?.、??

1.8K10
领券