人们可以放心地忽略宏和内置宏之间的区别吗?

2024-04-16

我从 Clojure 开始,这也是我的第一个 lisp。显然有很多东西需要吸收,为了减轻认知负担,我尝试找到我可以安全地忽略的部分(目前)。

人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单,或者是否会出现以后出现的陷阱?

换句话说,我是否会遇到需要知道的情况(defn f1 [])扩展到

(def f1 (.withMeta (clojure.core/fn f1 ([])) (.meta (var f1))))

一般来说,宏的组成非常不同。宏不是“一等公民”:你不能将它们传递给map等等,你不能将它们存储在变量中,也不能apply将它们添加到参数列表中。最初你不需要担心这些,因为它们会明显地不起作用:一个微妙的、难以察觉的错误会更麻烦。如果你尝试跑步

(map if [true false true false] [1 2 3 4] [-1 -2 -3 -4])

事实上,如果是不是一个函数会变得非常明显。请记住,宏不是函数,你应该没问题:)

PS:宏是(fn (fn (fn :-D) :^P) :O)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人们可以放心地忽略宏和内置宏之间的区别吗? 的相关文章

  • 当我有表面声明时,如何为 sm_1X 和 sm_2X 编译 CUDA 程序

    我正在编写一个使用表面 重新采样并写入纹理 来提高性能的库 surface
  • 有没有一种简单的方法可以使用 Common Lisp 中的 Python 库?

    在编写 Common Lisp 代码时我真正怀念的一件事是访问 Python 库 包括标准库和第三方模块 CLPython 提供了 Python 功能的有限子集 这阻止了大多数库的使用 因此这对我来说并不是很有用 我希望能够从 Common
  • 在Emacs中,这个错误是什么意思? “警告:运行时需要 cl 包”

    我正在字节编译一个模块 它给了我这个警告 Warning cl package required at runtime 为什么这是一个警告 我很清楚我正在使用cl包裹 事实上有一个 require cl 模块中的语句 使用有什么问题吗cl
  • Clojure gen-class 返回自己的类

    我现在正在使用 Clojure 创建一个类对象 它有一个返回对象本身的方法 用Java编写的 我想要制作的对象是这样的 class Point public double x public double y public Point dou
  • clojure 中的反转哈希映射

    我在 clojure 中有哈希映射 key1 value1 key2 value2 key3 value1 我需要将其转换为哈希映射 value1 key1 key3 value2 key2 有 Clojure 方法可以做到这一点吗 clo
  • AIRFLOW:在 jinja 模板中为 {{ds}} 使用 .replace() 或relativedelta()

    我的目标是根据气流宏变量 ds 返回上个月的第一天并使用它 例如在 Hive 操作符中 例如 对于 ds 2020 05 09 我预计返回 2020 04 01 我找到并尝试的解决方案是 SET hivevar LAST MONTH ds
  • 如何创建惰性序列向量

    运行它按预期工作 defn long seq n lazy seq cons list n somekey n 2 long seq n 1 take 3 long seq 3 gt 3 somekey 6 4 somekey 8 5 so
  • 为什么“(def 元音?(set“aeiou”))”有效?

    我正在看优秀的 Clojure 教程here http ociweb com jnb jnbMar2009 html 在其中一个示例中 它具有如下所示的 Clojure 代码 def vowel set aeiou 这使得元音对于元音返回
  • 宏扩展忽略了 MSVC 中的一些标记

    我在 msvc 编译器中遇到宏扩展问题 我希望将以下代码扩展为F x 它在 gcc 和 clang 上执行 但 msvc 将其扩展为F忽略x令牌 这里发生了什么 define S s s define F define M S S F x
  • 什么时候应该在 Clojure 中使用临时重新绑定特殊变量这一习惯用法?

    我注意到一些库 例如 clojure twitter 使用特殊的变量 用于动态绑定的变量 被星号包围 进行 oauth 身份验证 您将身份验证保存在 var 中 然后使用 with oauth myauth 我认为这是解决此类问题的一个非常
  • 宏、Clojure 与 Common Lisp

    我和我的一些朋友正在开发一个新平台 我们想用 lisp 构建它 主要吸引力是宏 我们都使用 Common Lisp 但我想探索 Clojure 的选择 当我提出这一点时 其中一位说宏观体系 较弱 我想知道这是否属实 以及在哪些领域 就您可以
  • Leiningen 中的本地依赖项无需创建 Maven 存储库?

    我正在构建一个 Compojure Web 应用程序 我希望它使用我编写的另一个 Clojure 项目中的函数 我对 Maven 一点也不熟悉 据我所知 它的学习曲线非常陡峭 很遗憾 一切 https stackoverflow com q
  • 我从 clojure 和 python 中得到的 hmac 签名略有不同

    我从 python 实现和 clojure 实现中获得的 HMAC SHA1 签名略有不同 我很困惑什么会导致这种情况 Python实现 import hashlib import hmac print hmac new my key my
  • 使用 ProGuard 混淆 clojure uberjar

    我想知道是否有人有使用 proguard 混淆他们的 leiningen 编译的 uberjar 的经验 我已经尽力在谷歌上寻找解决方案 但找不到真正的答案 我想知道这是否可能 我一直在尝试混淆默认的 lein 项目 这是 core clj
  • 为什么 LISP 中符号名称中的连字符是约定俗成的?

    这个推荐的理由是什么 为什么不与使用下划线的其他编程语言保持一致 我认为 LISP 使用连字符有两个原因 历史 和 因为你可以 History LISP 是一种古老的语言 在早期输入下划线可能会很困难 例如 我用于 LISP 的第一个终端是
  • 宏和后置增量

    这是一些更奇怪的宏观行为 我希望有人能够阐明 define MAX a b a gt b a b void main void int a 3 b 4 printf d d d n a b MAX a b 输出为 4 6 5 b 的值增加两
  • 将向量作为绑定传递给 for 宏时出现问题

    我有任意数量的列表 我想使用 for 宏来处理它们 我想创建一个传递向量作为绑定的函数 因为列表的数量各不相同 如果我对绑定进行硬编码 它会按我的预期工作 gt def list1 pink green gt def list2 dog c
  • 枚举和 Clojure

    在Java C世界中 人们经常使用枚举 如果我使用的是使用枚举的 Java 库 我可以在它们和关键字之间进行转换 例如 使用 java lang Enum valueOf e aget Ljava lang Enum e getEnumCo
  • 使用 ## 和 __LINE__ 创建 C 宏(与定位宏的标记串联)

    我想创建一个 C 宏来创建一个基于名称的函数 在行号上 我想我可以做类似的事情 真正的函数在大括号内有语句 define UNIQUE static void Unique LINE void 我希望能扩展到类似的内容 static voi
  • 有没有办法模拟小部件或屏幕特定位置的触摸?

    我想触摸或点击小部件上的某处 而不让用户在此时明确触摸屏幕 有什么办法可以做到吗 我已经检查了SO答案 有些人建议使用 集成测试 但在未物理或以某种方式连接到笔记本电脑的设备上无法执行 集成测试 无法找到更好的措辞 我还尝试进行 hitTe

随机推荐

  • 经典 ASP #include virtual 不起作用

    我们正处于从 IIS6 2003 到 IIS8 2012 的迁移过程中 我们必须维护一些经典 ASP 以及 ASP 和 NET 应用程序 完整的应用程序似乎运行良好 例如 我进入 IIS 右键单击文件夹并执行 转换为应用程序 但我们的站点严
  • ExpressionHelper.GetExpressionText(表达式)不返回我的属性的名称

    我已经实现了 MVC 扩展来格式化应用程序中的数字 它基于找到的代码here https stackoverflow com a 7766382 455492 并且如下 public static MvcHtmlString Decimal
  • 如何在 bash 中启动 Docker-ubuntu 容器?

    答案来自这个问题 https stackoverflow com questions 21928691 how to continue a docker which is exited不工作 docker 容器总是先于我退出attach或不
  • 自定义通知声音未播放

    我正在尝试在状态栏通知上播放自定义声音 这 mp3文件位于res raw 但是当我通知用户时 声音不会播放 我尝试过使用 MediaPlayer 它可以工作 但我不想让它与 MediaPlayer 一起播放 这是我的方法 public vo
  • 在聚合物项目上转换 dart2js 时出错

    不支持的操作 无法在反射中使用ownerName 因为它未包含在 MirrorsUsed 注释中 ownerName只是聚合物元素上的已发布属性 我知道有一些这样的东西 在网络上 而不是在这里 但没有一个有可靠的答案 我还在下面得到了这个
  • bash 替换每行中的第一个字符

    我的文件如下所示 1 chrX 73833098 73834098 1 chrX 73889652 73890652 1 chrX 91194501 91195501 1 chrX 92000157 92001157 1 chrX 9210
  • 为什么导入的函数“作为”另一个名称保留其原始 __name__ ?

    Here from os path import exists as foo print foo name we get exists 为什么不 foo 哪个属性会给出 foo 您可以查看import foo as bar只是一个任务 你不
  • 有没有办法在不出现 PlatformNotSupportedException 的情况下读取响应标头?

    我正在为 ASP Net MVC 开发一个过滤器属性 当内容未被修改时 它将返回 304 响应 为了实现这一目标 能够读取控制器中设置的 Last Modified 标头值会很方便 似乎只是一个问题 在 Cassini Visual Stu
  • 我可以绕过 Windows 中 Statc 级联上下文菜单的 20 项限制(注册表项/子项)

    我正在为 Windows 中的 ImageMagick 创建详细的静态级联上下文菜单 一切似乎在功能方面都运行良好 直到我通过上下文菜单传递了 20 个项目 此后 单击命令将停止正常运行 项目也会消失 我知道这不是格式问题 因为我可以通过删
  • 为什么这个 .vimrc 映射在终端中不起作用(但在 MacVim 中起作用):map O

    我的 vimrc 文件中有两行 map
  • 使用Knockout将不同模型绑定到页面上的不同部分

    我在我的 asp net 应用程序中使用淘汰赛 javascript 库 对于淘汰赛我使用ko对象和应用绑定 方法来绑定它 现在我想将两个淘汰对象绑定到两个不同的用户界面部分 我如何使用第二个淘汰对象或第二个数据源 以便我可以在第二部分中使
  • Python:如何制作递归生成器函数

    我一直致力于为生物学问题生成所有可能的子模型 我有一个工作递归来生成我想要的所有子模型的大列表 然而 列表很快就会变得难以管理 在下面的示例中 N 12 是可能的 N gt 12 使用了太多内存 所以我想使用yield 将其转换为生成器函数
  • 如何注册音量变化通知?

    当 OS X 音量发生变化时 我需要通知我的应用程序 这适用于桌面应用程序 不适用于 iOS 我如何注册此通知 这可能有点棘手 因为某些音频设备支持主通道 但大多数不支持 因此音量将是每个通道的属性 根据您需要执行的操作 您可以仅观察一个通
  • 显示/隐藏 C# 控制台应用程序的控制台窗口

    我在谷歌上搜索了有关如何隐藏自己的控制台窗口的信息 令人惊讶的是 我能找到的唯一解决方案是涉及的 hacky 解决方案FindWindow 找到控制台窗口按其标题 我对 Windows API 进行了更深入的研究 发现有一种更好 更简单的方
  • 在 Core i7 Mac 上禁用睿频加速?

    有没有什么方法可以在运行 Mac OS X 的 Core i7 mac 上以编程方式禁用 Turbo Boost 我需要能够在代码优化等过程中出于基准测试目的执行此操作 如果做不到这一点 任何可以禁用 启用 Turbo Boost 的实用程
  • Mac 终端上的基本命令行不起作用

    我在尝试安装 mongodb 时更改了 bash 配置文件 但我的命令行均无法在终端上运行 我在网上读到我需要修复 PATH 但当我的命令都不起作用时我什至无法访问它 Help 错误地 我也遇到了同样的问题 要解决这个问题 我必须将 PAT
  • 生成随机布尔概率

    我只知道如何生成随机布尔值 真 假 默认概率为 50 50 但我怎样才能以自己的概率生成真假值呢 假设它返回 true 的概率为 40 60 或 20 80 等 一种方法是检查返回值Random Next 100 小于您期望的概率 但我无法
  • 在 Javascript 中根据 JSON 数据创建饼图

    我是 PHP 和 JavaScript 新手 我需要使用从 URL 获取的 JSON 数据创建一个饼图 JSON 数据是 Domain Artificial Intelligence Count 46 Domain Data Archite
  • Actionscript 内存管理、垃圾收集

    这个博客 http blogagic com 163 flex memory management and memory leaks varref 和其他人 指出 在清理对象时 您应该在 dispose 方法中将对象引用设置为 null 但
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说