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

在clojure中,如何从另一个宏评估宏的参数?

在Clojure中,可以使用eval函数来评估宏的参数。eval函数接受一个Clojure表达式作为参数,并返回该表达式的评估结果。

下面是一个示例代码,展示了如何从另一个宏中评估宏的参数:

代码语言:clojure
复制
(defmacro evaluate-params [params]
  `(do ~@(map eval params)))

(defmacro my-macro [param1 param2]
  (let [evaluated-params (evaluate-params [param1 param2])]
    `(println "Evaluated params:" ~evaluated-params)))

(my-macro (+ 1 2) (* 3 4))

在上面的示例中,evaluate-params宏接受一个参数列表params,并使用map函数将每个参数都通过eval函数进行评估。然后,my-macro宏使用evaluate-params宏来评估param1param2,并将评估结果打印出来。

请注意,使用eval函数需要谨慎,因为它可以执行任意的Clojure代码,可能存在安全风险。在实际开发中,应该避免过度使用eval函数,尽量使用其他更安全的方式来处理宏的参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SFFAI 分享 | 李扬 :二阶信息图像分类应用

1、导读 ---- 此次分享文章主要关于二阶信息图像分类应用。Alexnet起,深度神经网络飞速发展,取得了一系列骄人成绩。总体来说,深度分类网络主要分为两个部分:特征提取和分类器。...2、分享者简介 ---- 李扬,北京大学信息科学技术学院在读硕士,本科毕业于北京科技大学,2018年MS COCO Panoptic Segmentation Contest PKU_360团队(第三名...目前主要研究兴趣点在于图像object detection。希望可以结识更多的人,彼此分享,共同交流。...预处理目的在于保证迭代收敛,具体可以参考论文中分析;由于预处理过程改变了协方差矩阵特征值大小,为了消除这一影响,引入后处理操作,将除掉特征值大小乘回来,实验表明,后处理这个操作也是十分关键。...4、总结 ---- 就个人而言,二阶信息使用帮助我更好理解细分类问题,为什么BCNN细分类问题中可以取得显著效果。

36520

Clojure 开发那些事

作为万里长城第一步,这篇文章首先如何入门 Clojure 语法,紧接着介绍 Clojure 开发环境搭建,然后介绍使用第三方库时一些注意点,最后介绍一下常见测试方法。...Clojure 宿主语言现在主要有两个:一个是最多最多基于 JVM 另一个是基于微软 .NET Clojure-CLR,现在还有一个发展迅猛 ClojureScript,可以将 Clojure...Emacs + Cider 组合相比 Intellj + Cursive 最大优势就是对支持,Cider 提供了对展开快捷键,但在 Cursive 我没找到,不过也是比较高级功能,初学者应用用不到...其实,使用第三方类库之余,多去了解其实现,代码 Github 上 Clone 下来,慢慢看,Clojure 里面提供了很多实用小方法,像partition, juxt, group-by等等不一而足...nrepl Clojure REPL 可以连接到远程服务器上进程,直接对进程函数或变量进行修改,这是非常便利,对于很多运行时错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程

1.6K20
  • C++使用QtSLOT须要注意一个小细节

    大家都知道C++虚函数机制,对于基类定义为虚函数地方,子类假设覆写,基类指针或者引用来指向子类时候会实现动态绑定。...但在使用QtSLOT时候,会出现一个问题须要注意,就是connect时候,你给当前子类对象child设置了SLOT,但这个基类实现过,举个样例 Class Base : public...public Base { Q_OBJECT public: Child(); privare slots: void say(){ qDebug() << "Child" }; }; Base...myConnect,this指针表示你在当前Base类,这个时候非常自然去调用Base::say(),一開始可能这样写为了自己主动连接和断除比較方便,可是假设你写了继承子类,你非常自然去覆写了...say这个函数,而且认为既然不是虚函数,没什么须要操心,你可能会去用Child去连接别的对象,心理还在想着Basesay实现方法(由于我记得我当初链接信号时候写是Base,而且我如今没实用指针和引用

    1K20

    一个模块多个如何按顺序自动运行(Excel VBA)

    将一个略微复杂工作内容编入VBA,我们可能需要许多拼在一起运行才能实现。那么如何按照自己想要顺序依次运行这些,实现我们需要结果? 一个办法是编写一个新,分别按顺序call你需要运行。...call方法有几种,比较简单是以下两种, call 1 call 2 或者省略call,直接 1 2 这样,你需要调用就会按照顺序执行。...但是,当你调用非常多时候,可能有几十个,以上还是有点麻烦。...此时可以如下操作: 所有的有规律命名,例如有15个,那么依次是 sub hong1,sub hong2,sub hong3......sub hong15 最后写个循环汇总以上所有 Sub huizong...() Dim q For q = 1 To 15 Application.Run "hong" & q Next q End Sub 运行最后这个汇总,你前15个就会依次按顺序运行。

    7.1K30

    Clojure 运行原理之编译器剖析

    为了更加具体描述 Clojure 运行原理,会分两篇文章来介绍。 本文为第一篇,涉及到主要内容有:编译器工作流程、Lisp 机制。...第二篇将主要分析 Clojure 程序编译成 bytecode 如何保证动态语言特性以及如何加速 Clojure 程序执行速度,这会涉及到 JVM 类加载机制、反射机制。 编译型 VS....是否为一个,而这又是通过检查var是否为一个函数,并且元信息macro是否为true。...Clojure 里面通过defmacro函数创建,它会调用varsetMacro函数来设置元信息macro为true。...,form参数即是展开后各种数据结构(String/ISeq/IPersistentList 等),返回值类型为Expr,可以猜测出,Expr子类是程序主体,遵循模块化编程风格,每个子类都知道如何对其自身求值

    99930

    clojure基础入门(一)

    欢迎进入clojure世界。  ? 变量 Clojure变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应javaobject,然后通过变量名直接调用。...函数式编程以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回值当成Get函数参数:  ?...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现,关于后面再说。

    1.5K30

    clojure基础入门(一)

    欢迎进入clojure世界。  ? 变量 Clojure变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应javaobject,然后通过变量名直接调用。...函数式编程以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回值当成Get函数参数:  ?...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现,关于后面再说。

    1.3K40

    Clojure 学习入门(11)—— macro

    clojure macro在运行之前机械展开,定义相当于给语言增加新特性,写*原则*:  能写成函数就不要用(因为写没有写函数简单直观,容易写错,需要先在 REPL 测试一番) ...只有不得不用时才用(性能要求高时比函数调用快,或者需要“代码数据”相互转换)  精心设计调用比函数调用更 DSL(如实现控制结构、传递 Java方法)  与函数 ;; 正确写法 (defmacro.../macroexpand-all '(op3 5 + 2 * 10))) ;; (op3 5 + 2 * 10) 说明:  正确写法,需要添加 list,用defmacro定义,不用写法函数用...,后面传递参数,使用 ~' 修饰直接翻译过去,即字符串传字符串,:dict 键值也传键值 with-dict 传递多个参数给body,其中 dbname tbname  with-dict 中被重新赋值...,因此打印出结果也为赋值后最新结果

    1K20

    Clojure Web 开发-- Ring 使用指南

    Clojure 众多 Web 框架,Ring 以其简单统一 HTTP 抽象模型脱颖而出。...Compojure 里面使用了大量来简化路由定义,像上面例子GET、not-found等。...这个组合函数,它会把 QueryString 参数解析到 request map :query-params key ,表单参数解析到 request map :form-params...Ring 与其说是一个框架,不如说是由各个短小精悍函数组成 lib,充分展示了 Clojure 语言威力,通过函数组合定义出一套完整 HTTP 抽象机制,通过来实现“路由”特定领域语言,极大简化了路由定义...除了上面的介绍,Ring 生态里面还有 lein-ring ,它可以不重启服务情况下重新加载有修改命名空间(以及其影响),开发从未如何顺畅。

    85210

    Clojure 运行原理之字节码生成篇

    ASM 生成可运行在 JVM bytecode。...本文将主要讨论 Clojure 编译成 bytecode 如何实现动态运行时以及为什么 Clojure 程序启动慢,这会涉及到 JVM 类加载机制。...交互 defrecord、deftype生成同名类,proxy、reify生成匿名类 需要明确一点,只有 AOT 编译时,Clojure 才会在本地生成 .class 文件,其他情况下生成类均在内存...我们知道 Clojure 里面很多“函数”其实是用实现在编译时会进行展开,生成新代码,上面代码ns、defn都是,展开后( Cider + Emacs 开发环境下,C-c M-m)可得...real 0m0.900s user 0m1.422s sys 0m0.087s 启动时加入-verbose:class 参数,可以看到很多 clojure.core 开头类 ..

    72920

    Clojure与LispClojure与Lisp

    Clojure 高速、干净、具有优先能力和优雅特征. 但是没有改变lisp "代码也是数据" 哲学. Clojure 语言直觉和观感上比历史上lisp更易于阅读....2 函数也是一种数据类型 Lisp语言中,函数与整数或字符串一样,也属于数据类型一种。它有自己字面表示形式(literal representation),能够储存在变量,也能当作参数传递。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp语法; 在编译期运行代码,则是Lisp工作基础; 在运行期编译代码,使得Lisp可以Emacs这样程序,充当扩展语言(extension...最常用做法就是使用。 术语""Lisp语言中,与其他语言中意思不一样。Lisp无所不包,它既可能是某样表达式缩略形式,也可能是一种新语言编译器。...Clojure 还是一个动态类型语言 我们可以选择添加类型信息来提高代码关键路径性能。

    1.9K30

    使用 ClojureScript 开发浏览器插件过程与收获

    dev 过程,推荐设置 cljsbuild optimizations 为 none,以便得到最快编译速度; release 过程,可以将其设置为 advanced,来压缩、优化 js...{build-id} {watch-mode} 非常棒一点是它也能支持热加载,所以开发过程我一直开着它。...Clojure,一般需要单独把定义一个文件里面,然后 cljs 里面用(:require-macros [my.macros :as my]) 这样方式去引用,而且定义文件名后缀必须是 clj...由于编译与 cljs 编程不同时期,所以如果写错了,就需要把 repl 杀掉重启来把新 feed 给 cljs,这点也比较痛苦,因为 repl 启动速度实在是有些慢。...这一点 Clojure 里面虽然也存在,但是 Clojure 里面一般 repl 开了就不关了,直到电脑重启。

    78430

    Clojure 学习入门(7)—— 连接mysql

    Clojurecontrib包实现了对现有JDBC封装,wiki上有连接,该页面上包含了对不同数据库连接方法和基本操作,但是这个页面上没有提供足够信息,足够一个初学者能够使用Clojure...其次,和MySQL操作,我们需要两个库,一个是clojure.contrib,另外一个是mysql-connector-java-xxx.jar。...接着,需要使用sql库地方要导入这些库 ns中加载如下内容:(:use [clojure.contrib.sql :as sql :only ()]),这样本文件中就可以直接使用sql作为前缀...示例 创建表 fruit,并插入两条记录,然后条件查询和全部查询  1) project.clj ,添加sql依赖: (defproject myClojure "0.1.0-SNAPSHOT"...注:所有的sql操作都需要在with-connection下包裹着 参考推荐: Clojure SQL 基础 Clojure 连接mysql Connecting Clojure and MySQL

    1.1K20

    Bash如何字符串删除固定前缀后缀

    更多好文请关注↑ 问: 我想从字符串删除前缀/后缀。例如,给定: string="hello-world" prefix="hell" suffix="ld" 如何获得以下结果?...如果模式与 parameter 扩展后开始部分匹配,则扩展结果是 parameter 扩展后删除最短匹配模式(一个 # 情况)或最长匹配模式(## 情况)值 ${parameter...如果模式与 parameter 扩展后末尾部分匹配,则扩展结果是 parameter 扩展后删除最短匹配模式(一个 % 情况)或最长匹配模式(%% 情况)值。...e "s/$suffix$//" o-wor sed命令,^ 字符匹配以 prefix 开头文本,而结尾 匹配以 参考文档: stackoverflow question 16623835...Bash如何将字符串转换为小写 shell编程$(cmd) 和 `cmd` 之间有什么区别 如何Bash变量删除空白字符 更多好文请关注↓

    45610

    几分钟内学习 Clojure

    Clojure源码托管:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释开始 ; Clojure 用一种把元素用括号括起来像列表一样方式来书写...,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者调用,其他都作为参数 ; 下面这个函数用于设置当前命名空间 (ns test) ; 更多基本例子: ; str 函数会用它所有的参数创造一个字符串...命名空间包含更多函数 ; 一些有用形式 ;;;;;;;;;;;;;;;;; ; clojure逻辑结构都是, 看起来也没什么不同 (if false "a" "b") ; => "b"..."") ; => true ; 你可以导入模块时候自定义名称 (require '[clojure.string :as str]) (str/replace "This is a test....;; ; java 拥有一个庞大各种用途标准库,你一定迫不及待想学习如何clojure中使用这些库 ; 使用import类引入java模块(这个还好没变化) (import java.util.Date

    1.7K40

    Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你程序永远不需要明确定义符号、函数、或者参数数据类型。但是,所有的值仍然有一个类型。...(re-pattern " [a-zA-Z]*") -> #"[a-zA-Z]*" 也可以使用读取来直接用文本方式输入正则表达式:字符串前使用#符号。...实际上,它作用远不止于声明一个列表,当涉及到元编程时候,单引号十分必须。请阅读12章里里使用quote来实现复杂元编程详细讨论。...向量Clojure程序字面表示是使用方括号。例如,一个由1到5组成向量可以通过如下代码定义并绑定到一个符号上:(def nums [1 2 3 4 5]) 向量它们索引函数。...这样使用Clojure映射的话,那么面向对象数据组织里获得某些技巧和教训并且规避它缺点就变得可能了。

    2.3K10
    领券