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

Clojure 学习入门(11)—— 宏 macro

clojure macro宏在运行之前机械展开,定义宏相当于给语言增加新特性,写宏的*原则*:  能写成函数就不要用宏(因为写宏没有写函数简单直观,容易写错,需要先在 REPL 中测试一番) ...只有不得不用时才用宏(性能要求高时比函数调用快,或者需要“代码数据”相互转换)  精心设计的宏调用比函数调用更 DSL(如实现控制结构、传递 Java方法)  宏与函数 ;; 宏正确写法 (defmacro...; (* 10 (+ 5 2)) (println (clojure.walk/macroexpand-all '(op 5 + 2 * 10))) ;; (* 10 (+ 5 2)) ;; 宏错误写法...10))) ;; 2 (println (clojure.walk/macroexpand-all '(op2 5 + 2 * 10))) ;; 2 ;; 不使用宏...,需要添加 list,宏用defmacro定义,不用宏写法的函数用defn定义 调试宏,用macroexpand展开 宏符号 ` 原原本本地直译过去,不用`,let语句不被翻译,例如: (let [datastr

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Win32汇编:过程与宏调用

    宏过程(Macro Procedure)是一个命名的语汇编语句块,一旦定义后,宏过程就可以在程序中被调用任意多次,调用宏过程的时候,宏内的语句块将替换到调用的位置,宏的本质是替换,但像极了子过程,宏可定义在源程序的任意位置...; 将被替换为上面两行代码 ret main ENDP END main 一个代替求和函数的宏 MySum macro var1, var2, var3 mov eax,var1...esi,esi endm .code main PROC MySum ret main ENDP END main 使用PURGE取消指定宏的展开: MySum macro xor...ret main ENDP END main 在宏内使用局部标号: MyMax macro var1,var2 LOCAL jump mov eax,var1 cmp eax,var2...;转义操作符 ;自定义的宏 mPrint macro Text PrintText '* &Text& *' endm .code main proc ;该宏会把参数直接替换过去

    66120

    Win32汇编:过程与宏调用

    (Macro Procedure)是一个命名的语汇编语句块,一旦定义后,宏过程就可以在程序中被调用任意多次,调用宏过程的时候,宏内的语句块将替换到调用的位置,宏的本质是替换,但像极了子过程,宏可定义在源程序的任意位置...; 将被替换为上面两行代码ret main ENDPEND main一个代替求和函数的宏MySum macro var1, var2, var3mov eax,var1add eax,var2add...: 通过定义默认值,可以不给默认的变量传递参数.; 参数 var1、var2 通过 REQ 标识说明是必备参数MySum macro var1:req, var2:req, var3:=...retmain ENDPEND main在宏内使用局部标号:MyMax macro var1,var2LOCAL jumpmov eax,var1cmp eax,var2jge jumpxor eax,...;转义操作符;自定义的宏mPrint macro Text PrintText '* &Text& *'endm.codemain proc ;该宏会把参数直接替换过去 mPrint

    46430

    Oracle 20c 新特性详解:SQL Macro 宏 SCALAR TABLE 模式带来的敏捷和便利

    墨墨导读:在 Oracle 20c 中,SQL的宏支持 - SQL Macro 为 SQL 开发带来了进一步的敏捷和便利,在这篇文章中,我们来详细了解一下 SQL Macro 的特性用法。...在 20c 中引入的 SQL Macro 支持两种宏类型,Scalar 和 Table 类型。...调用范例: WITH east_coast as(SELECT deptno FROM dept WHERE loc = 'Boston')SELECT *FROM budget(east_coast...RETURN q’[SELECT * FROM t WHERE dbms_random.value<=sample.pct/100]’; END sample; / 调用过程...最后总结一下 SQL Macro 的意义: • SQL宏提供了一个基于SQL的简单框架,用于封装业务/技术逻辑 –无需在查询中调用自定义PL / SQL过程和函数 • 可以在SQL语句内的任何地方使用;

    2.1K20

    Macro-Ods Excel Output

    而且拆分成各个小模块如果以后再写其他程序或者Macro的时候是可以直接调用的,其实有这几点好处就已经很有必要将一个复杂,或者涉及知识点较多的Macro给拆分在组装。...通过这张截图,就可以看出小编写的Macro是怎么使用的,宏参数有哪些,各个参数是干嘛用的,以及创建人等等一些描述性的东西,很容易让人看懂这个宏是功能,和版本。...Macro的宏参数,一般在写程序前会大致设计几个,然后在写的过程中不断完善,或者觉得没有必要可以删减,也可以设置参数的默认值。...好吧,还是多说几句,(%local :定义局部宏变量,只作用在当前Macro,%global:是定义全局宏变量,不能说是定义,应该用“申明”更加准备一些)本来还想说一下其他的宏函数,想一想还是不说了 第...这个时候就用到了之前的report的宏,用了循环。着就是组装,Macro中调用Macro。

    2K30

    STATA Tidbits:Macro Extended Functions

    前言 宏(Macro)是STATA程序中很重要的概念,主要用来在循环语句中对一系列变量名称或者数字进行替代,从而减少机械重复。在这些基础用法之外,STATA提供了一些宏的函数,来增强宏的功能。...本文将对其中两类宏函数进行举例介绍。 Macro Extended Functions 所有宏函数的语法格式是一致的: localmacro:function,即在定义好宏的名字之后的冒号后使用函数。...这时,平行列表结合宏函数 word i of可以简洁的解决这个问题。...平行列表即是两个宏变量: local thresholdlist "0 2 5" local varlist "make gear_ratio mpg" word i of函数可以选取一个列表中的第 i...`varlabel'" rename `var' `varlabel' } 具体来说: 第一行的 ds product_id 是把所有刚才生成的产品变量名称放到一个叫做 r(varlist)的宏里

    1.5K41

    Scala Macro 现状介绍

    Scala Macro Scala Macro 是 Scala 2.10 版本增加的一个新的语言特性,让开发者可以在编译期动态修改/生成代码,为开发工作提供了很大的灵活性。...Scala Macro 发展的高峰是 Scala 2.11 版本,增加更多新特性,其中最耀眼的便是QUASIQUOTES,它可以帮助开发者屏蔽编译器底层的细节,很大程度上简化了Macro的编写工作。...到了Scala 2.12,Scala Macro 基本上没有太多变化,并且直到目前为止,Scala Macro 一直被打着EXPERIMENTAL标签,冥冥之中似乎预示着不好的征兆,果然 Scala Macro...其实早在2018年的3月17日,Scala Macro 的核心作者 Eugene Burmako 就已经宣布放弃 Scala Macro 了,似乎也是在为 Scala 3.0 做准备。 2....当前如何使用 Scala Macro ?

    1.5K50

    【Rust 基础篇】Rust宏:代码生成的黑魔法

    宏,使用macro_rules!关键字定义。它是一种基于模式匹配的文本替换宏,类似于C语言中的宏定义。声明宏在编译期展开,用匹配的代码片段替换宏调用处的代码。...来调用宏,实现了打印消息的功能。 2.2 带参数的宏 宏不仅可以不带参数,还可以带有参数。让我们创建一个带参数的宏,用于计算两个整数的和。 macro_rules!...来调用宏,实现了计算两个整数的和并输出结果。 2.3 重复模式 声明宏还支持重复模式,允许我们处理变长参数列表。 macro_rules!...在宏展开中,我们使用递归调用将多个表达式相加,最终得到它们的和,并输出结果。 3....然后在代码中,我们可以像调用普通宏一样调用函数宏,将需要处理的代码片段作为输入传递给函数宏。 5.

    1.2K60
    领券