另外的注意点:

1.  同名符号的 “变量捕捉” (varible capture)

解决方式:  with-gensym 生成几个unique name-s, 然后将它们各自绑定上参数值

2. 多次求值 、 求值顺序

①多次求值: 比如参数传进来的某个 s-expression的计算是带有副作用的(求值次数不能多求), 你必须控制它只会被计算一次,  而不能在 `( ) 内出现多次 ,s

解决方式:   only-one

就如上图一样, 把 ,stop先求值一次 并把结果赋给 gstop ,则不会出现多个 ,stop了

②求值顺序 :  比如上图中 start , stop 都是有副作用的计算,那就必须保证 start 在 stop 之前求值,不能改变求值顺序。

3. modify-macro (修改宏)

比如库中的 incf 这个宏,类似的 第一个参数为目标变量place的 修改, 都得靠 define-modify-macro 来实现。(特征:place是第一个参数、且返回值是修改后的对象)


Macro的写法 `( , ,@ )的更多相关文章

  1. C预处理器

    C预处理器 目录 概述 文件包含 宏替换 条件包含 概述 预处理器是编译过程中单独执行的第一个步骤 文件包含 #include "文件名" / #include <文件名&g ...

  2. Freemarker宏和函数的用法和区别

    1.宏(macro) 写法:<#macro page url page maskSize=5>    <#if (number == pages)> <li>< ...

  3. scheme 宏macro写法

    scheme里的宏不同的实现有不同的写法: 1.mzscheme的define-macro (mzscheme也就是pltschme,也就是drracket,没有define-macro这个关键字) ...

  4. obj.style.z-index的正确写法

    obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...

  5. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  6. .NET跨平台之旅:数据库连接字符串写法引发的问题

    最近在一个ASP.NET Core站点中遇到一个奇怪问题.当用dotnet run命令启动站点后,开始的一段时间请求执行速度超慢,有时要超过20秒,有时甚至超过1分钟,日志中会记录这样的错误: Sys ...

  7. 【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分部视图,异步

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{ ...

  8. 常用原生JS方法总结(兼容性写法)

    经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...

  9. touchstart,touchmove,touchend事件 写法

    jQuery写法: $('#id').on('touchstart',function(e) { var _touch = e.originalEvent.targetTouches[0]; var ...

随机推荐

  1. Rust中的Cargo工作空间实践

    这是为了开发大型程序,分治crate用的. 目录结构如下: 一,根cargo.toml内容 [workspace] members = [ "adder", "add-o ...

  2. SDL2学习(二):常用枚举值和函数

    1. 高频枚举值或结构体 1.1 SDL_WindowFlags /** * \brief The flags on a window * * \sa SDL_GetWindowFlags() */ ...

  3. AtCoder abc 141 F - Xor Sum 3(线性基)

    传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二 ...

  4. Revit 2019 下载链接

    [安装环境]:win7/win8/win10 [64位下载] 百度网盘链接:pan.baidu.com/s/1Vq5Cnyj1G-oMNup_sXvxfQ  提取码:d6xd

  5. Python进阶-XIV 面向对象初步

    1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...

  6. ActionResult源码分析笔记

    ActionResult是一个抽象类: public abstract class ActionResult { public abstract void ExecuteResult(Controll ...

  7. 快速挖pi币

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. [LeetCode] 52. N-Queens II N皇后问题之二

    The n-queens puzzle is the problem of placing nqueens on an n×n chessboard such that no two queens a ...

  9. [LeetCode] 8. String to Integer (atoi) 字符串转为整数

    Implement atoi which converts a string to an integer. The function first discards as many whitespace ...

  10. .NET CORE编写控制台程序应有的优雅姿势(转载)

    原文地址:https://www.cnblogs.com/zuowj/p/11107243.html 本文所说的编写控制台程序应有的“正确”方法,我把正确二字加上引号,因为没有绝对的正确,因人而异,因 ...