当前位置: 首页 > 编程笔记 >

clojure 简单的固定宏

康元凯
2023-03-14
本文向大家介绍clojure 简单的固定宏,包括了clojure 简单的固定宏的使用技巧和注意事项,需要的朋友参考一下

示例

Clojure使用前缀表示法,即:运算符位于其操作数之前。

例如,两个数字的简单和为:

(+ 1 2)
;; => 3

宏允许您在一定程度上操纵Clojure语言。例如,您可以实现一个宏,该宏使您可以使用infix表示法(例如1 + 2)编写代码:

(defmacro infix [first-operand operator second-operand]
    "Converts an infix expression into a prefix expression"
    (list operator first-operand second-operand))

让我们分解一下上面的代码:

  • defmacro是用于定义宏的特殊形式

  • infix 是我们定义的宏的名称。

  • [first-operand operator second-operand] 是该宏在调用时希望接收的参数。

  • (list operator first-operand second-operand)是我们宏的主体。它只是list使用提供给infix宏的参数值创建一个,然后将其返回。

defmacro是一种特殊形式,因为它的行为与其他Clojure构造相比有所不同:它的参数不会立即求值(当我们称为宏时)。这就是让我们编写如下内容的原因:

(infix 1 + 2)
;; => 3

的infix宏将扩大1 + 2参数到(+ 1 2),这是可以被评估一个有效的Clojure形式。

如果要查看infix宏生成的内容,可以使用macroexpand运算符:

(macroexpand '(infix 1 + 2))
;; => (+ 1 2)

macroexpand,顾名思义,它将扩展宏(在这种情况下,它将使用infix宏转换1 + 2为(+ 1 2)),但不允许Clojure的解释器评估宏扩展的结果。

 类似资料:
  • 本文向大家介绍响应式表格之固定表头的简单实现,包括了响应式表格之固定表头的简单实现的使用技巧和注意事项,需要的朋友参考一下 数据展示时,表头的固定,可以有更好的可读性。 一、实现方式: 1、定义2个表格,一个absolute固定 2、表1<th>复制,并插入表2 3、resize()方法,实时获取表1各列<th>宽度 4、页面过小时,表格滚动带表头滚动 二、注意细节: 1、宽度自适应、去除单元格间

  • 我有一个网页与一个主div在中心,可以滚动通过垂直。 我想有一个固定的菜单,停留在页面的右手边。但是,如果我使用'position:fixed',当我调整页面大小使其小于中央div时,菜单与中央div重叠 相反,我希望中央div的最小宽度优先,并且固定菜单只出现在右滚动在这种情况下。 一个固定的菜单是否可以放在中央div的右边,而不是固定在浏览器的右边? 对不起,如果这个问题不清楚,我很乐意回答评

  • 问题内容: 许多人仍然使用表格来布局控件,数据等。-流行的jqGrid就是一个例子。但是,发生了一些我似乎无法理解的魔术(它的桌子大声喊叫,可能会有多少魔术?) 如何设置表的列宽并使它像jqGrid那样遵守!?如果我尝试复制此内容,即使我设置了every ,只要这些单元格之一的内容大于20px,该单元格就会展开! 有什么想法或见解吗? 问题答案: 您可以尝试对所有行使用标签管理表样式,但是您需要在

  • 问题内容: 我已经有一段时间了,这似乎是一个Chrome重绘错误,尚未修复。因此,我正在寻找任何权宜之计。 主要问题是页面上的元素具有使用以下内容的背景图像时: 如果另一个元素固定并具有子视频元素,则它将导致具有背景图像的元素消失。 现在,它可以在Safari(以及Firefox和IE)中正常运行,因此这并不是Webkit的问题。我已经应用了一些没有用的建议属性。 目前,我的解决方案只是通过媒体查

  • 问题内容: 我正在寻找实现以下目标的最简单,最直接的方法: 主程序实例化工作线程来执行任务。 只能一次运行任务。 当到达,没有更多的工人开始,直到运行的线程数降回到低于。 问题答案: 我认为Executors.newFixedThreadPool符合您的要求。有多种不同的方法可以使用生成的ExecutorService,具体取决于您是希望将结果返回到主线程,还是该任务完全独立,以及是否有要执行的任

  • 问题内容: 许多人仍然使用表格来布局控件,数据等。-流行的jqGrid就是一个例子。但是,发生了一些我似乎无法理解的魔术(它的桌子大声喊叫,可能有多少魔术?) 如何设置表的列宽并使它像jqGrid那样遵守!?如果我尝试复制此内容,即使我设置了every ,只要这些单元格之一的内容大于20px,该单元格就会展开! 有什么想法或见解吗? 问题答案: 您可以尝试对所有行使用标签管理表样式,但是您需要在或