首页
学习
活动
专区
圈层
工具
发布

在Common Lisp中编写++宏

在Common Lisp中,可以使用defmacro定义一个名为++的宏,以实现自增的功能。以下是一个示例:

代码语言:lisp
复制
(defmacro ++ (place &optional (delta 1))
  `(setf ,place (+ ,place ,delta)))

这个宏接受两个参数:一个是要自增的变量,另一个是自增的步长(默认为1)。它使用setf宏来更新变量的值,将其设置为当前值加上步长。

以下是一个使用++宏的示例:

代码语言:lisp
复制
(let ((x 0))
  (++ x)
  (print x))

输出:

代码语言:txt
复制
1

需要注意的是,++宏只能用于变量,不能用于常量或字面量。此外,它不支持原子操作,因此在多线程环境下可能会出现竞争条件。

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

相关·内容

一文读懂基于 Yaegi 解释器开发可热插拔的 Traefik 插件

3、Gisp:Gisp 是一个使用 Go 语言编写的 Lisp 解释器,它支持基本的 Lisp 语法和函数,并提供了一些扩展功能,如 Go 函数和类型的调用。...它支持动态类型、高阶函数、闭包、宏扩展等 Lisp 特性,并能够直接调用 Go 语言的函数和方法。...6、Golo:Golo 是一个基于 Go 语言实现的 Lisp 解释器。它支持大多数的 Lisp 特性,包括宏扩展和动态类型。...与上述相比较,Golo 是一个更加复杂和功能更为丰富的 Lisp 方言,其语法和特性与 Common Lisp 有很多相似之处。...它可以在应用程序中嵌入 Go 脚本,实现动态配置和扩展。此外,Yaegi 还支持在沙箱环境中运行代码,避免了潜在的安全风险。

2.2K51

写本Racket入门书

一个朋友曾经开玩笑跟我说过:「学lisp就是没事找事,自己跟自己过不去」这话在理。所以,两三年前与clojure嬉戏的时候,在我心里,她始终就像朱紫国那个金圣娘娘,身披七彩霞裳,跟刺猬一样,亲近不得。...但Paul Graham在「黑客与画家」中对lisp的无比推崇又让我一直如鲠在喉,不征服lisp仿佛自己始终没能窥探编程的奥义,那种感觉,估计和搞到了法国却搞不定约瑟芬的拿破仑一样一样的。...就这么一周苦读下来,在Racket上,我算是刚刚如了门。...能写点简单的程序,做个动画,画个图,用regex处理下文本,定义一些简单的语法聊以自慰(你可以打开github repo下的util/common.rkt自行观看,不要鄙视我)。...这是肉戏,也是lisp的精髓 9) 用宏来设计你的语言:假象一门语言,用Racket实现 10) 延迟计算:讲讲continuation,延伸到concurrency 11) 用Racket编写服务器程序

2.5K80
  • Emacs 折腾记

    我工作中倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,历数现代 Lisp 方言的先进性,再者我也一直有学习一门函数式编程语言的想法...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...在 ~/.emacs 文件里加上: M-x slime 就可以进入到 REPL 进行 Common Lisp 的学习了。...在 ~/.emacs 文件里添加: 这样自动补全之类的就没有问题了。 然后在如何运行当前 py 文件这件事上遇到些问题。在 Vim 中我一直是用 :!

    1.6K20

    在springboot中编写一个上传接口

    max-size:允许上传文件的最大大小 allowed-type:可以自定义能够上传的文件类型 Spring Boot 有内置的文件上传限制,默认情况下,这些限制可能会影响到上传文件的大小,即使你已经在自定义属性中设置了...在 application.yml 中配置的路径将会注入到这个字段中。 存储上传文件的最大大小 (maxSize): maxSize 字段用来存储允许上传的文件的最大大小限制。...因为我们在yaml中已经设置过端口号,所以这里便可以直接获取到我们的端口号7801,以便我们后续的使用 文件静态资源配置config文件 Spring Boot 默认不提供静态资源映射到文件系统的功能,...其实 File.separator 的作用相当于 ' \ ',在 windows 中 文件文件分隔符 用 ' \ ' 或者 ' / ' 都可以,但是在 Linux 中,是不识别 ' \ ' 的,而 File.separator...message); } } 这个文件很有必要,因为我试过了,如果不加这个全局异常捕获,只写在controller层,程序是无法准确的将错误信息返回,会直接抛异常,所以我们需要定义该类来全局捕获此异常,在全局异常处理中覆盖可能遗漏的情况

    19210

    Clojure与LispClojure与Lisp

    1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...2 函数也是一种数据类型 在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量中,也能当作参数传递。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法; 在编译期运行代码,则是Lisp宏的工作基础; 在运行期编译代码,使得Lisp可以在Emacs这样的程序中,充当扩展语言(extension...这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。...Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。如果你想真正地理解Lisp语言,或者想拓宽你的编程视野,那么你必须学习宏。

    2.1K30

    各种编程语言对尾递归的支持

    Common Lisp   测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp将数据和过程用不同的命名空间...RESET   因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...但是似乎也改变了Lisp的味道,do显然此处只能在设计编译器、解释器的时候就得单独实现,虽然按理Lisp下这些都应该是宏,但是无论用宏如何将函数式编程映射为显示的迭代,因为尾clisp递归优化不支持,则无法和系统提供的...sbcl是Common Lisp的另外一个实现,在这个实现中,我们使用第一个add函数的版本,没有发生崩栈。...也终于给了我们一个更为靠谱的Common Lisp的实现。

    2.9K20

    优雅的在终端中编写Python

    但是偶然的一次机会需要改一个奇葩的输入文件的格式,用了下Vim的宏录制,尝到了甜头,于是后面就开始用Vim来写程序了,虽然使用初期有些阻力,但时间久了就会发现,双手再也不用离开键盘,即使使用sublime...Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部。...在配置文件中可以将其绑定到快捷键上方便快速启动。 map :TagbarToggle 效果如下: ?...其他插件 Vim 的插件很丰富,这里我就不再一一赘述了,希望这些强大的工具能让我们在终端中更优雅的编写Python(不限于Python啦),有关我使用的vim插件都在我的.vimrc中,有兴趣的童鞋可以搜索相应的插件名称进行查看...同时为了方便自己我也写了相应的安装和卸载脚本,方便大家参考,github地址:PytLab/dotfiles 总结 本文主要简单介绍下本人平时编程中使用tmux,vim等工具的配置,希望能借此帮助大家能更好的在终端中进行程序编写提高工作效率

    2K81

    VBA实用小程序61: 在文件夹内所有文件中运行宏在工作簿所有工作表中运行宏

    学习Excel技术,关注微信公众号: excelperfect 在文件夹中所有文件上运行宏,或者在Excel工作簿中所有工作表上运行宏,这可能是一种非常好的Excel自动化方案。...在文件夹内所有文件中运行宏 代码如下: '本程序来自于analystcave.com Sub RunOnAllFilesInFolder() Dim folderName As String...4.每个打开的工作簿在关闭时不会保存所作的修改。 在子文件夹内所有文件中运行宏 当想在文件夹中所有Excel文件上运行宏时,其中的一种情况是遍历所有子文件夹来运行宏。..." End Sub 在工作簿所有工作表中运行宏 代码如下: '本程序来自于analystcave.com Sub RunOnAllWorksheets() Dim folderName As String...MsgBox "在所有工作表中已完成宏执行" End Sub 代码中: 1.打开ActiveWorkbook中的每个工作表而不是ActiveSheet,可以根据需要删除If语句。

    5.5K11

    在Dash中更灵活地编写回调函数

    但这并不是不可打破的铁律,事实上,Dash还额外提供了多种多样的回调角色编排方式,官方称之为Flexible Callback Signatures,从而解决单个回调函数中角色太多时代码可读性变差等问题...,今天的文章中,我就将带大家学习相关的实用知识,从而更清晰地进行Dash应用开发及维护。...2 嵌套式字典化角色编排 当我们在使用上文所介绍的字典化角色编排方式时,除了在字典中平铺书写相应角色外,还可以向下继续进行字典嵌套,从而实现更自由的参数分组效果,相应的,对应输入参数也会以字典的形式传入内部的各键值对参数...dash.ctx.outputs_grouping.keys() } 其中构造defaultdict并设置默认值等过程,我也会在fac即将发布的0.3.x版本中封装为一步到位的工具函数,毕竟这种场景在进阶...Dash应用的开发中还是很常用的,省得在常规方式中逐个写dash.no_update或其他默认值。

    42230

    优雅的在终端中编写Python

    但是偶然的一次机会需要改一个奇葩的输入文件的格式,用了下Vim的宏录制,尝到了甜头,于是后面就开始用Vim来写程序了,虽然使用初期有些阻力,但时间久了就会发现,双手再也不用离开键盘,即使使用sublime...自动给打开的文件添加头部 例如我们编写Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部...YCM除了在.vimrc中进行配置外,还有一个Python的配置文件.ycm_extra_conf.py,在里面我们可以设置相应的编译选项,比如编译参数,头文件和库文件的地址等等,这样我们在编写C/C+...在配置文件中可以将其绑定到快捷键上方便快速启动。 ? 效果如下: ?...其他插件 Vim 的插件很丰富,这里我就不再一一赘述了,希望这些强大的工具能让我们在终端中更优雅的编写Python(不限于Python啦),有关我使用的vim插件都在我的.vimrc中,有兴趣的童鞋可以搜索相应的插件名称进行查看

    2.1K10

    在 Swift 中编写脚本:Git Hooks

    在本例中,我使用了 commit-msg 钩子,它能够在当前提交信息生效前修改此信息。钩子由一个参数调用,该参数是指向包含用户输入的提交消息的文件的路径。...Git hooks可以使用任何你熟悉的,并且在主机上安装了解释器(通过shebang来指定)的脚本语言来编写。 虽然有很多更受欢迎的选项,比如bash、ruby等等,但我还是决定使用Swift。...为此,在 macOS 下选择 Command Line Tool 创建一个新的项目。 在创建的文件顶部加上Swift shebang,引入Foundation库。 #!...编写git钩子 项目已经全部设置好,所以现在可以编写git挂钩了。让我们走完所有的步骤。 检索提交消息 要做的第一件事就是从脚本传进来的参数检索临时提交文件的路径然后读取文件内容。...在下面的截屏中,创建了两个分支,一个带有问题编号,一个没有,它们有着相同的提交信息。可以看出脚本运行正常,并且只在需要时才更改提交消息!

    1.9K10

    在 Laravel 中编写高级的 Artisan 命令

    在上一篇教程中,学院君向大家介绍了什么是 Artisan 命令,系统内置的 Artisan 命令,以及如何编写一个简单的 Artisan 命令。...因此,在这篇教程中,我们将更进一步,一起来看下如何编写更加高级的 Artisan 命令,比如带输入参数、选项,以及能够与用户互动,输出图表/进度条的 Artisan 命令。...命令时,就会以交互方式让我们输入信息了: 输出信息 在命令执行过程中,需要输出信息给用户,告知用户执行进度、结果或者错误信息,否则会相当不友好。...在应用代码中调用 Artisan 命令 除了在命令行运行 Artisan 命令之外,还可以在应用代码中通过 Artisan 门面调用它。...你还可以在一个 Artisan 命令类中调用另一个 Artisan 命令,在命令类中调用 Artisan 命令,可以通过 Artisan:call(),也可以直接通过 this->call() 方法,还可以通过

    8.9K20

    excel宏编程 c语言,宏(巨集)

    宏(Macro, 巨集),是一种批处理的称谓。 计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。...对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。...Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。...== 宏语言 == 宏语言是一类编程语言,其全部或多数计算是由扩展宏完成的。宏语言并未在通用编程中广泛使用,但在文本处理程序中应用普遍。...其它的包括宏语言的项目,如OpenOffice.org,故意从其宏语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性在很多事务中受到欢迎。

    1.9K20

    在现代 JavaScript 中编写异步任务

    如果我们通过添加事件侦听器去响应用户对元素的单击,则无论语言解释器在运行什么,它都会停止,然后运行在侦听器回调中编写的代码,之后再返回正常的流程。...Node.js 开辟了一个在不同环境中甚至在 web 之外编写 JavaScript 的新时代。当然异步的情况也是可能的,例如创建新目录或写文件。...对返回值进行的后续操作无需存储在不会破坏代码节奏的 mkdir 之类的变量中;也无需在以后的步骤中创建新的作用域来访问 result 的值。...结论 将 Promise 引入 Web 开发的目的是改变我们在代码中顺序操作的方式,并改变了我们理解代码的方式以及编写库和包的方式。...与十年前刚刚开始在浏览器中编写代码时相比,我觉得现在 JavaScript 是“异步友好”的。

    2.8K30

    用html编写或在dw中完成,Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码

    Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码,代码,教程,标签,光标,文本 Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码 易采站长站,...站长之家为您整理了Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码的相关内容。...3.在“新建文档”界面选择“空白页”。 4.“页面类型”选择“HTML”,“布局”选择“”。然后单击“创建”按钮。 在Dreamweaver中打开新文档窗口。切换到 “代码”或者“拆分”视图。...12.最后一步给HTML文档添加 ,一可在右上角“标题”栏直接输入,二可以在标签之间输入。 以上就是关于对Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码的详细介绍。...欢迎大家对Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码内容提出宝贵意见 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134536

    2.9K10
    领券