`
阿尔萨斯
  • 浏览: 4174163 次
社区版块
存档分类
最新评论

ELisp编程十四:宏三

 
阅读更多

下面的宏实现了一个逻辑:

首先将expression求值,然后赋值给var

如果var为真,则执行then参数求值后的表达式

否则执行else参数求值后的表达式,else参数为可选。


感谢danlei带来的例子。

该文章他的回答解释了为什么比C/C++宏强大的原因。

http://stackoverflow.com/questions/10535684/lisp-macro-special-usage/10539594#comment13658407_10539594

(require 'cl)

(defmacro* bif ((var expression) then &optional else)
  `(let ((,var ,expression))
     (if ,var ,then ,else)))

(macroexpand-all '(bif (x 5) (print "ok") (print "bad")))

注意,必须加载cl的库,而且要是用defmacro* 函数。


如果要是实现这样的逻辑,C/C++用宏怎么解决呢?光一个编译时求值用宏就非常难办了。


分享到:
评论

相关推荐

    elisp-koans:Emacs Lisp Koans-通过测试驱动的开发学习elisp

    elisp-koans:Emacs Lisp Koans-通过测试驱动的开发学习elisp

    elisp-demos:演示Emacs Lisp API

    Elisp API演示 在Ch f mapcar显示mapcar的Elisp演示:用法要将elisp演示注入*Help* ,例如Ch f ( Mx describe-function ),请使用( advice-add 'describe-function-1 :after # 'elisp-demos-advice-describe-...

    elisp-def:查找Emacs Lisp定义

    elisp-def:查找Emacs Lisp定义

    elisp-lint:Emacs Lisp的基本皮棉

    elisp-lint:Emacs Lisp的基本皮棉

    cedille:Cedille,一种基于依赖Lambda消除演算的依赖类型编程语言

    Cedille编程语言 请参阅以获取有关的介绍。储存库内容重点cedille-mode/ :用于Cedille Emacs模式的Elisp代码cedille-tests/ :Cedille Emacs前端的单元测试core/ :Cedille Core Checker的Haskell实现language-...

    elisp入门手册-emacs lisp入门手册

    这是叶文彬写的emacs lisp入门手册。我把它整理了一下。原文链接的pdf加密了,打不开。...本文的读者应当有一定 emacs 使用经验,会至少一种编程语言。如果不符合这个条件,我想你也不会对 elisp 感兴趣的。

    Emacs-Elisp-Programming, 有关编程Elisp和Emacs文本编辑器自定义的教程.zip

    Emacs-Elisp-Programming, 有关编程Elisp和Emacs文本编辑器自定义的教程 Emacs - 编程和自定义概述Emacs不需要任何演示文稿。 Emacs提供了一款软件,它提供了可以编程文本编辑器。电子邮件阅读器。文本浏览器。图片 ...

    Elisp 入门教程(Elisp中文手册)

    叶文彬 (wenbinye@gmail.com)写的,这就是水木清华中happierbee写的教程的pdf版。内容浅显易懂,适用于初学者。

    elisp document

    elisp 资料 http://www.gnu.org/software/emacs/manual/elisp.html

    elisp函数手册chm版

    emacs所用的解释语言elisp的chm格式的函数手册,非常实用。

    elisp.js:Elisp转JS转译器

    elisp.js 这是从Emacs Lisp到Javascript的翻译器。演示版为什么? 目标之一是了解v8上的Emacs Lisp可以有多快。 这可能是将来在浏览器中运行Emacs软件包的基础(可能使用作为Emacs运行时的UI)。 当然,学习Emacs ...

    elisp-maintainers:Elisp维护者以及如何支持他们

    Elisp维护者以及如何支持他们 这是Emacs软件包,其项目以及如何支持它们的维护者的列表。 显然这是非常不完整的,我只快速添加了一些维护者,他们的捐赠页面很容易^ 1,并且为我自己添加了更长的条目,以展示我希望...

    Elisp入门(叶文彬).pdf

    Emacs,著名的集成开发环境和文本编辑器。Emacs被公认为是最受专业程序员喜爱的代码编辑器之一。 本文档为Emacs所使用的脚本语言(Elisp)的参考手册,使用Elisp可以扩展Emacs的功能。

    elisp-repl:具有Readline支持的Emacs Lisp REPL

    具有Readline支持的Emacs ...cc -shared -fpic -lreadline elisp-repl-readline.c -o elisp-repl-readline.so 安装 : M-x package-install e2ansi 准备load-path : ( push " ~/src/elisp-repl/ " load-path) 加

    elisp manual

    emacs lisp语言elisp的manual。 虽然emacs内置这些文档,但是保留一份还是非常不错的。

    elisp反编译:Emacs Lisp反编译器

    我们目前正在记录Elisp字节码。 参见 您可能会发现自己正在咨询源代码: , 和 。 虫子 您应该这样想,例如,用Google翻译在两种人类语言之间进行转换:有时您得到的东西是完美的,有时您得到的东西有些固执,但您...

    elisp-bug-hunter, 在elisp文件中,查找错误.zip

    elisp-bug-hunter, 在elisp文件中,查找错误 Bug 猎人 自动调试和分割初始化(. emacs ) 文件 !Bug 是一个Emacs库,它查找elisp配置文件( 通常 init.el 或者 .emacs ) 中错误或者意外行为的来源。 用法示例自动错误...

    elisp:学习Elisp

    elisp 学习Elisp

    git-elisp-overview:与Git相关的Emacs软件包

    cd git-elisp-overview make init 然后更新使用 make pull 所有套餐 一切为git文件 一切为git grep 在Github存储库中自动设置bug-reference-url-format 。 突出显示文件访问缓冲区中未提交的更改 按文件大小,...

    elisp-manual-ja:Emacs Lisp Reference Manual 日本语版

    Emacs Lisp 参考手册 该数据从下载并转换为 UCS。 此数据是 Emacs Lisp 参考手册的日语翻译。但是,由于它是基于10多年的手册,因此在许多地方已经过时。

Global site tag (gtag.js) - Google Analytics