您好!您提到的问题是关于Lisp宏。Lisp是一种通用的、基于表达式的编程语言,它的宏系统允许用户定义可以在编译时展开的代码模板。Lisp宏可以用于创建具有高级语法的宏,从而使代码更简洁、更具可读性。
关于您的问题,如果您的Lisp宏没有按预期工作,可能是由于以下原因:
如果您需要更多关于Lisp宏的信息,请随时提问。我会尽力帮助您解决问题。
一个语言的发明人, 居然不肯用心弄出一套漂亮的语法, 那谁还会愿意学它。反正, 我是确确实实被那些难看的无数的括号搞蒙了。 回过神来之后, 我和Lisp社区的那伙人交谈, 诉说我的沮丧心情。...好吧, 我来试一下。这篇文章就是我尝试的结果。我要用熟悉的直观的方法来解释Lisp, 我希望有勇气的人读完它, 拿杯饮料, 深呼吸一下, 准备被搞得晕头转向。来吧, 愿你获得大能。...其实, Lisp源码就是特定的一种表, 好比Ant源码是一种特定的XML一样。Lisp执行表的顺序是这样的, 表的第一个元素当作函数, 其他元素当作函数的参数。...*, 3, 4 我们可以用一个内置的函数head来返回表的第一个元素, tail函数来返回剩余元素组成的表。...(macro-name (+ 4 5)) 这里, (+ 4 5)作为一个表传递给宏, 然后宏就可以任意处理这个表, 当然也可以对它求值。宏的返回值是一个表, 然后有程序作为代码来执行。
思想8和思想9,意味着你可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。...Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。如果你想真正地理解Lisp语言,或者想拓宽你的编程视野,那么你必须学习宏。...就我所知,宏(采用Lisp语言的定义)目前仍然是Lisp独有的。一个原因是为了使用宏,你大概不得不让你的语言看上去像Lisp一样古怪。...但是,在我看来,这两种写法好像都比第一个版本更复杂。...代码中其他任何外加的形式,都是一个信号,(至少对我来说)表明我对问题的抽象还不够深,也经常提醒我,自己正在手工完成的事情,本应该写代码,通过宏的扩展自动实现。 (完)
一个语言的发明人, 居然不肯用心弄出一套漂亮的语法, 那谁还会愿意学它。反正, 我是确确实实被那些难看的无数 的括号搞蒙了。 回过神来之后, 我和Lisp社区的那伙人交谈, 诉说我的沮丧心情。...几个月来, 我承受着这些Lisp辩护士对我心灵的重压。我一度陷入了困惑。我认识一些绝顶聪明的人, 我对他们相当尊敬, 我看到他们对Lisp的赞美达到了宗教般的高度。...好吧, 我来试一下。 这篇文章就是我尝试的结果。我要用熟悉的直观的方法来解释Lisp, 我希望有勇气的人读完它, 拿杯饮料, 深呼吸一下, 准备被搞得晕头转向。来吧, 愿你获得大能。...其实, Lisp源码就是特定的一种表, 好比Ant源码是一种特定的XML一样。 Lisp执行表的顺序是这样的, 表的第一个元素当作函数, 其他元素当作函数的参数。...(macro-name (+ 4 5)) 这里, (+ 4 5)作为一个表传递给宏, 然后宏就可以任意处理这个表, 当然也可以对它求 值。宏的返回值是一个表, 然后有程序作为代码来执行。
大家好,又见面了,我是你们的朋友全栈君。 宏(Macro, 巨集),是一种批处理的称谓。 计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。...Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。...例如,一种 Lisp 方言有 cond 而没有 if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的 CLOS 系统,可以由宏来定义。...Emacs 最初被设计为编辑语言 TECO 的宏集,后被移植为 Lisp 的一种方言 Emacs Lisp。Vim也允许用户录制和播放简单的键盘宏。...但由上面的定义,它完全不是一种宏语言。然而,它的功能已经从中发展并最终替代了用户应用程序的宏思想,所以它被广泛地错误地称为是一种宏语言。 VBA可以访问许多操作系统函数并支持文档打开时自动执行宏。
前言 我想我们对宏并不陌生,因为很多程序员第一门语言就是 C/C++; 一些 Lisp 方言也支持宏(如 Clojure、Scheme), 听说它们的宏写起来很优雅;一些现代的编程语言对宏也有一定的支持...所以反过来推导,之所以C语言需要宏,正是因为C语言的表达能力太弱了。 语法扩展式 真正的宏起源于Lisp. 这个得益于Lisp语言本身的一些特性: ? 它的语法非常简单。...通过上面的示例,你会感叹Lisp的宏实现竟然如此清奇,如此简单。搞得我想跟着题叶学一波Clojure,但是后来我学了Elixir ?. ?...Lisp宏的灵活性得益于简单的语法(S-表达式可以等价于它的AST),对于复杂语法的语言(例如Javascript),要实现类似Lisp的宏就难得多....Lisp 宏的一个关键技术点。
除了最基本的圆括号()外,方括号[]与花括号{}在 Clojure 用的也比其他 Lisp 方言中多。...,我发现一个特点,Lisp 语言的英文介绍往往过于精炼,不适合初学者直接阅读,为了夯实基础,还是建议大家找本书来看,看书的好处是不仅仅知道某个知识点,更重要的是了解不同知识点之间的区别与联系,初学期间,...Emacs + Cider 的组合相比 Intellj + Cursive 最大的优势就是对宏的支持,Cider 提供了对宏展开的快捷键,但在 Cursive 中我没找到,不过宏也是比较高级的功能,初学者应用用不到...,最好带着 issue 里面的问题去看代码,说不定你就从使用者变成了开发者呢,我第一个尝试给了 http-clj。...Intellj Debug Mode 借助于 IDE 的优势,我们可以打断点,一步一步调试,但是 Cursive 对宏的支持比较有限,目前出来把宏展开外,没找到好的调试宏的好方法。
对于 大多数人来说,它的语法过于诡异了. Clojure 修正上面的大多数这些问题. 它保留了 lisp 的思想和哲学,并同时清除了过去的很多限制....Lisp的宏 Lisp语言刚出现的时候,它的思想与其他编程语言大相径庭。后者的设计思想主要由50年代后期的硬件决定。随着时间流逝,流行的编程语言不断更新换代,语言设计思想逐渐向Lisp靠拢。...它们从此使得Lisp看上去很古怪,但也成为了这种语言最独一无二的特点。 Lisp古怪的形式,倒不是因为它的语法很古怪,而是因为它根本没有语法,程序直接以解析树(parse tree)的形式表达出来。...思想8和思想9,意味着你可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。...Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。如果你想真正地理解Lisp语言,或者想拓宽你的编程视野,那么你必须学习宏。
类似地,.vimrc配置文件在网络上也多如牛毛,华丽和酷炫的插件极大地提升了vim的操作性。尽管如此,我还是乐于一砖一瓦地打造自己的vim环境,竭力演化它变成我心目中的“编辑器之神”。...这个过程一般会充满修改然后重启的重复性机械劳作,偶尔会遭遇无论怎么修改就是不生效、甚至遍寻google也一无所获的挫折,但是我就是无法厌倦它。...这就不得不提起Clojure这门lisp方言,出于对lisp和函数式编程的痴迷,我选择了基于JVM的Clojure作为自己的偏好语言,而emacs天生为lisp而生。...,顾名思义,多个包的下载源,我给package-archives设置了5个包源,它们之间服从顺序的优先级,即先从第一个源中下载包,如果没有,到第二个源中寻找,以此类推。...当你正在编译文件的时候,包中宏就会原地展开,然后被eval-when-compile宏加载进内存并被编译成字节码,供后续解析器执行。
阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上的Lisp方言,属于函数式编程范式,它和java可以方便的互相调用,这样开发的程序可以很好的结合java和clojure...函数式编程中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数。...clojure中(lisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以只要看到后面带问号的函数名,就知道这一定是一个判断语句。 user=> (fn?...宏(macro) Clojure中几乎所有的函数和宏都是用Clojure代码实现的,关于宏后面再说。
然而 -- 这种变化并没有从 2000 到 2011 年的那般戏剧化, 也没有从 1990 到 2000 年的翻天覆地. 我们又到了在计算机和软件技术上的一个瓶颈期了吗?...我最喜欢的是 Clojure. 因为 Clojure 极其简单. 它是 Lisp 的一个方言, Lisp 是一个十分简单和漂亮的语言....在这里, 来稍微展示一下: 在 Java 中的一个函数: f(x); 现在, 将它转换为 Lisp 的一个函数, 简单地将第一个括号移到左边即可: (f x)....此外, Clojure 基于 JVM, 它完全可以访问 Java 库, 和任何其他的 Java 框架和库. 它的互用性快速而便捷....你应该去学习它. 如果你还在想你应该从哪个语言学起, 我推荐 Clojure. 本文译自: Pragmatic Functional Programming
与其他Lisp一样,Clojure认为代码即数据,同时有复杂的宏系统。 Clojure 的理念和特性 Clojure是什么,为什么有人要学这门语言?...它第一个对外的发行版是在2007年秋季的时候发布的,在2009年5月发行了第一个稳定版,到这个时候,它已经培育了一个活跃的、充满热情的社区,一个欣欣向荣的开发工具和类库的生态系统,它们被用在迅速增长的一系列专业的应用程序中...它的高级属性是被精心选择的,目的是向程序员提供健壮的、干净的代码,以便程序员容易理解和高效编程....对于 大多数人来说,它的语法过于诡异了。 Clojure 修正上面的大多数这些问题. 它保留了 lisp 的思想和哲学,并同时清除了过去的很多限制....) 1957 – FORTRAN (第一个编译型语言) 1957 – COMTRAN (COBOL语言的祖先) 1958 – LISP 1958 – ALGOL 58 1959 – FACT (COBOL
R语言是由Ross Ihaka和Robert Gentleman开发,1995年推出第一个版本。目前它由R开发核心团队维护。...Prolog语言最适合创建聊天机器人,ELIZA是用Prolog创建的第一个聊天机器人。 ?...第一个成功的聊天机器人,图源medium 要理解Prolog,你必须熟悉指导它工作的一些基本术语: Facts(事实)定义了真实的声明。 Rules(规则)定义了有附加条件的声明。...——Kent Pitman Lisp作为一种实用的面向数学符号处理的编程语言,它很快成为开发人员的人工智能编程语言的选择。...Haskell提供的一些功能包括: 强大的抽象能力 内置的内存管理 代码可重用性 易于理解 SQL、Lisp和Haskell是我见过的仅有的编程语言,在这些语言中,人们花在思考上的时间比写代码的时间要多
R语言 官网 R语言是由Ross Ihaka和Robert Gentleman开发,1995年推出第一个版本。目前它由R开发核心团队维护。...第一个成功的聊天机器人,图源medium 要理解Prolog,你必须熟悉指导它工作的一些基本术语: Facts(事实)定义了真实的声明。 Rules(规则)定义了有附加条件的声明。...——Kent Pitman Lisp作为一种实用的面向数学符号处理的编程语言,它很快成为开发人员的人工智能编程语言的选择。...Haskell提供的一些功能包括: 强大的抽象能力 内置的内存管理 代码可重用性 易于理解 SQL、Lisp和Haskell是我见过的仅有的编程语言,在这些语言中,人们花在思考上的时间比写代码的时间要多...Julia源代码的目录结构 Julia提供的下列特性,使其在人工智能编程、机器学习、统计和数据建模中成为一个不可或缺的选项: 动态类型系统 内置的包管理器 能够进行并行和分布式计算 宏和元编程能力 支持多个调度
一个朋友曾经开玩笑跟我说过:「学lisp就是没事找事,自己跟自己过不去」这话在理。所以,两三年前与clojure嬉戏的时候,在我心里,她始终就像朱紫国那个金圣娘娘,身披七彩霞裳,跟刺猬一样,亲近不得。...但Paul Graham在「黑客与画家」中对lisp的无比推崇又让我一直如鲠在喉,不征服lisp仿佛自己始终没能窥探编程的奥义,那种感觉,估计和搞到了法国却搞不定约瑟芬的拿破仑一样一样的。...不少读者在看了我周二的文章「走进 racket(lisp) 的世界」后自豪地说自己的学校就开设了Racket的课程,作为编程入门语言,这真是羡煞死我。...(转格式估计都要累死我),就像我在书中的「前言」里写到的那样,写这本书是出于私利 —— 以教代学,它并不代表我对Racket有任何程度的深入掌握。...:介绍raco及主要的Racket packages 8) 可爱的宏:这是肉戏,也是lisp的精髓 9) 用宏来设计你的语言:假象一门语言,用Racket实现 10) 延迟计算:讲讲continuation
,之所以研究它,在于函数式编程会用到它。...但是似乎也改变了Lisp的味道,do显然此处只能在设计编译器、解释器的时候就得单独实现,虽然按理Lisp下这些都应该是宏,但是无论用宏如何将函数式编程映射为显示的迭代,因为尾clisp递归优化不支持,则无法和系统提供的...sbcl是Common Lisp的另外一个实现,在这个实现中,我们使用第一个add函数的版本,没有发生崩栈。...话说,awk没有对尾递归优化也属正常,而且对于内存的使用还真不节制,超过了我的想象。不过这也与语言的目的有关,awk本就没打算做这类事情。...看来,至少参考了Scheme的尾递归优化。 Ruby Ruby的作者松本行弘也是Lisp的粉丝,当然,我想大多数编程语言的作者都会是Lisp的粉丝,因为它会给人很多启发。
但是这种想法遭到了当时 Lisp 程序员的反对,最后麦卡锡开了 MIT,从此 Lisp 的语法凝固在 S 表达式上。 Lisp 建立在列表和 lambda 演算和基础上,是函数式编程的鼻祖。...COBOL 创造了一些新概念:宏(DEFINE)和数据结构(记录)。 COBOL 在商务领域被广泛的使用。 COBOL 对后来的语言几乎没有影响,但 PL/I 除外。 A.5....Scheme 第一个引入词法作用域,延续体,闭包等概念。并将数据和函数等同对待。 Scheme 的简约优美使它博得了计算机语言皇后的桂冠,并与另一个以优雅著称的 Pascal 一起成为教学语言。...JavaScript 和 Java 没有任何关系,它的前身是 ScriptEase。...ScriptEase 的诞生于 1992 年原名 C-minus-minus,是一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C 足够的相似性,以便开发人员能很快学会。
C ++ 优点 c++是最快的计算机语言,如果你的人工智能项目对于时间特别敏感,那么C++是很好的选择,它提供更快的执行时间和更快的响应时间(这也是为什么它经常应用于搜索引擎和游戏)。...这里我要推荐一个C语言c+交流Q群7-4-1-8-1-8-6-5-2,不管你是大牛还是小白,大家都一起成长进步。 ? 五大人工智能流行编程语言对比,只要学会一种绝对不亏!...在人工智能中使用Lisp,因其灵活性可以快速进行原型设计和实验,当然这也反过来促进Lisp在AI开发中的发展,例如,Lisp有一个独特的宏系统,有助于开发和实现不同级别的智能。...与大多数人工智能编程语言不同,Lisp在解决特定问题时更加高效,因为它适应了开发人员编写解决方案的需求,非常适合于归纳逻辑项目和机器学习。 缺点 很少有开发人员熟悉Lisp编程。...作为一种较古老的编程语言,Lisp需要配置新的软件和硬件来适应它的使用。 ?
开始之前,先让我们知道今天的Emacs是长怎样的? ? 不不,这是它的新Logo,我的意思是它的用途。 什么是Emacs? Emacs是一种功能超强的文本处理程序,或者文本编辑器。...基础部分是使用C语言编写的,其他部分是用Emacs Lisp编写的。深层次的话,C语言构成了emacs的底层,包括Emacs Lisp的解释器。...而Emacs Lisp则是负责了Emacs Lisp的建筑物上层,也就是包括我们平时用的扩展、界面等。...我原以为他们是混入了微内核与宏内核的争论。 ? 就好比是二十几年前,Linus和Tanenbaum那场著名的争论: ? 不要生气! ? 又或者是这样改了二十几的需求? ?...GNU一点儿也不敏捷,现代人都知道要先推出MVP,我不是这个意思: ? 让我们再回顾一下他们预期的Hurd内核的发布时间,还不错在2060年——如果我还键在,那么我应该就有71岁了。 ?
特性 快速:零拷贝解析,据观察,比Rust中常见的URI解析器快2-25倍; 简单:精心设计和文档良好的API; 严格:解析RFCs中定义的所有可能的URI,并拒绝其他任何东西。...() -> usize { 10 } 实现原理 #[rename_future(AsyncFnFuture)] async fn async_fn() -> usize { 10 } 宏展开后生成代码如下...Luau的版本 Announcing mlua 0.8.0-beta with Roblox Luau support 我很高兴地宣布第一个支持Roblox Luau的mlua 0.8.0-beta.1...; Ok(()) } rs-lisp:一个用Rust编写的小型lisp解释器 Tiny lisp interpreter 使用: cargo run [example.lisp] 项目地址:https...://github.com/ktfth/rs-lisp
领取专属 10元无门槛券
手把手带您无忧上云