Macros 如何使用Racket宏定义函数?

我正在尝试编写一个宏,它定义了一类特殊的数据结构和相关函数 我知道这是可能的;它在核心语言本身中执行了多次 作为一个具体示例,我将如何在Scheme本身中定义define struct宏。它需要创建make struct,struct-等函数 我尝试使用define,但是,这只定义宏词法范围中的函数 如何在宏中定义函数?答案的关键是datum->syntax。基本思想是,您希望获取一些随机数据并将其转换为语法——在本例中,将符号转换为标识符。标识符基本上是一个符号,带有一些词汇信息(非常粗略地)

Macros 有人能解释一下';卫生';对我来说(我是一名方案程序员)?

所以。。。我不熟悉scheme r6rs,正在学习宏。有人能给我解释一下“卫生”是什么意思吗 提前感谢。如果您想象宏只是扩展到使用它的地方,那么您也可以想象如果您在宏中使用变量a,那么在使用该宏的地方可能已经定义了变量a 这不是您想要的a 这样的事情不会发生的宏观系统称为卫生系统 有几种方法可以解决这个问题。一种方法是在宏中使用非常长、非常神秘、非常不可预测的变量名 另一个稍微完善一点的版本是一些其他宏系统使用的gensym方法:程序员不需要你,而需要一个非常长、非常神秘、非常不可预测的变量名,

Macros 如何在common lisp中重新实现反引号?

我必须在不使用内置读卡器宏`、@ 预期的行为是: > (BACKQUOTE (A B (LIST ‘C ‘D) (COMA (LIST ‘E ‘F) (COMA-AT (LIST ‘G ‘H))) (A B (LIST ‘C ‘D) (E F) G H) 我试着用一个宏来做,但结果并不是预期的 非常感谢 有什么可以做的提示吗?有一个例子适用于那些在试图理解paul graham代码的同时,很好地接受了一个简单且不正确的解决方案

Macros 在自定义BizTalk适配器中实现宏

我正在编写一个自定义适配器。我想实现内置适配器已经具备的宏功能 在我看来,BizTalk中或其他地方应该有一个内置的库,我可以将字符串传递给该库,它将返回结果字符串,并用宏的上下文数据替换宏 我这么想是不是疯了?这是否存在?谢谢 实现宏在很大程度上取决于您试图实现的适配器的上下文。事实上,据我所知,没有内置的图书馆可以做到这一点 然而,实现宏是相对容易的,并且您不必求助于正则表达式之类的。一个简单的令牌替换算法就可以了 实现诸如%DateTime%或%MessageID%之类的宏非常简单,可以在

Macros Racket宏可以接受关键字参数吗?

我想在Racket中创建一个语法形式,它可以接受关键字参数,就像某些函数可以接受的那样 把它简化为一个简单的例子后,我试着写: (define-syntax sum-of-products (syntax-rules (#:extra) [(sum-of-products ([a b] ...)) (+ (* a b) ...)] [(sum-of-products ([a b] ...) #:extra extra) (+ extra (* a b) .

Macros 是否有方法以编程方式(使用宏)在calc open office中附加文件(.txt)?

我有一个.txt文件,我需要附加在我的工作表的一列中,我有这个文件的路径。 因此,我需要以编程方式读取此路径并将文件附加到另一列中。有办法吗 提前谢谢。确实有!使用宏是很容易做到的 启用宏 进入工具>选项菜单,点击OpenOffice.org下的安全部分。到达后,单击宏安全按钮。现在在“安全级别”选项卡上,确保您的设置允许您运行宏 我的设置为低,因为我是我运行的所有宏的作者,如果您不确定这是否是您的情况,您可能需要使用更高的设置 注意:小心,如果你运气不好或生活在90年代,邪恶的宏会造成严重伤害

Macros 将大型SAS数据集拆分为较小的数据集

我需要一些帮助来将大型SAS数据集拆分为较小的数据集 每个月我都会有一个包含几百万条记录的数据集。这个数字每月都会有所不同。我需要将此数据集拆分为多个较小的数据集,每个数据集包含250000条记录。例如,如果我在原始数据集中有1050000条记录,那么我需要最终结果是4个包含250000条记录的数据集和1个包含50000条记录的数据集 从我所看到的来看,这似乎需要使用宏。不幸的是,我对SAS相当陌生(不熟悉使用宏),没有很多时间来完成这项工作。任何帮助都将不胜感激。如果您不介意要求提供可能不存在

Macros Clojure';s->;及->&燃气轮机;宏

Clojure的->宏从上一个参数执行窗体线程,而从第一个参数执行->窗体线程 user=> (->> a (+ 5) (let [a 5])) 10 然而,当我使用交换的操作时,我得到了一个异常 user=> (-> a (let [a 5]) (+ 5)) CompilerException java.lang.IllegalArgumentException: let requires a vector for its binding in user:1,

Macros 升华文本在\u下查找\u展开不在宏中工作

在尝试学习DarkLisp时,我尝试写入宏,用()来包装选择 我创建了包裹片段,分别记录了两个宏,并为宏分配了键绑定 它们看起来像这样 [ {"command": "find_under_expand"}, { "args": { "name": "Packages/User/snippets/wrap-after.sublime-snippet" }, "command": "insert_snippet" } ] 当我运行宏时,它的行为不符合预期 | = cursor so

Macros 变量函数名`#``语法的限制

偶尔,C/C++语法会让我大吃一惊,今天就是这样的一天。我偶然发现了一些代码,这些代码使用带有##的宏来生成特定硬件寄存器的唯一和单独的访问器方法(如下所示) 问题:使用##语法存在哪些限制或问题 static uint8_t write(uint16_t _addr, uint8_t _data); // Implemented elsewhere static uint8_t read(uint16_t addr); // Implemented els

Macros Racket中的运行时模式匹配

如果球拍的match宏是一个函数,我可以这样做: (define my-clauses (list '[(list '+ x y) (list '+ y x)] '[_ 42])) (on-user-input (λ (user-input) (define expr (get-form-from-user-input user-input)) ; expr could be '(+ 1 2), for example. (

Macros 从发射杂注中删除堆栈跟踪

如何创建不添加stacktrace的emit宏 import macros macro emitWithoutStacktrace(): stmt = result = newStmtList() result.add quote do: {.push stacktrace: off.} result.add(newNimNode(nnkPragma).add(newNimNode(nnkExprColonExpr).add(newIdentNode("emit"), n

Macros 在宏中使用listings包 我正在创建一个描述各种C++ SysCurrar函数的胶乳文档。我需要包括它们的原型、描述、返回值和常见用途。我被告知要包含代码,我需要使用listings包,但我在句子和表格中使用代码,因此用于列表的命令变得拥挤且不可读

第一个表中的列没有粗体字符和标题 这是我的密码 \begin{tabular}{l|l} \begin{lstlisting} void perror(const char* s) \end{lstlisting} & \begin{lstlisting} stdio.h, errno.h \end{lstlisting} \\ & prints argument message \begin{lstlisting} s \end{lstlisting} \ bas

Macros Lisp SBCL宏引用列表作为参数

假设我有一个宏 (defmacro repeat (times &body body) (let ((x (gensym))) `(dotimes (,x ,times) ,@body))) 然后我可以在repl上运行 CL-USER> (repeat 2 (print "Hi")) "Hi" "Hi" NIL 如果我跑 CL-USER> (list 'print "Hi") (PRINT "Hi") 那我为什么不能跑呢 CL-USER> (rep

Macros 如何获取宏重复单个元素的索引

我需要获取宏重复元素的索引才能编写下一个代码: 我知道一种方法:告诉用户手动编写索引: 但是有没有一种更优雅的方法不需要用户的操作呢?最简单的方法是使用递归,如下所示: 结构A{ 数据:[i32;3] } 宏规则!tst{ (@step$_idx:expr,)=>{}; (@step$idx:expr,$head:ident,$($tail:ident,)*)=>{ 暗示{ fn$head和self)->i32{ self.data[$idx] } } tst!(@step$idx+1usi

Macros %syslput在rsubmit SAS中不工作

----------------------实现rsubmit的使用&访问传递给它的值---------------------------- 我正在尝试编写一个代码来创建不同的远程会话,它还将在宏的帮助下将数据集值传递给特定的rsubmit块。我们知道,简单的宏变量值不能发送到rsubmit语句,因为rsubmit创建了新的会话。这就是我使用%syslput语句的原因。但它不起作用,请告诉我如何使用%syslput将数据集值传递给rsubmit语句 options sascmd='!s

Macros 计算宏中的重复长度

我正在尝试实现一个宏来创建MATLAB风格的矩阵。我有一个基本的工作宏,但我还有很长的路要走 我希望能够强制执行正确的结构(每行中的元素数相同),但我不确定如何在宏中实现这一点。我想我想强制每个内部重复都有相同的长度——这是我能做到的吗 以下是我目前的代码: pub struct Matrix<T> { pub cols: usize, pub rows: usize, pub data: Vec<T> } macro_rules! mat {

Macros 热键重新分配宏不工作

我正在使用自动热键重新分配Dr.Explain中的一些热键。宏执行到消息点,但实际的新热键不工作 以下是脚本: WinActivate, DRAFT_Complete Jazzit Help Masterfile* - Dr.Explain (Licensed to: Accountants Templates Inc.) MsgBox Normal --> Alt + A and Normal - emphasis --> Alt + S Return ;Change key

Macros 宏与接受表达式的函数

当我尝试下面的代码片段时,我发现变量I没有找到。为什么呢 function evalMyExpr(expr,n) for i in 1:n eval(expr) end end expr1 = Meta.parse("println(\"hello\")") expr2 = Meta.parse("println(string(i))") evalMyExpr(expr1,2) # ok evalMyExpr(expr2,2) # UndefVarError: i not d

Macros 变量转换器是否可以使用非文字标记?

make variable transformer(或make set!-transformer,在Racket中被称为transformer)可以使用宏定义的文本列表中硬编码的标识符。下面是设置了的示例总是出现: (make-variable-transformer (λ (stx) (syntax-case stx (set!) ((set! id _) ...) (id ...)))) 这很好,非常有用,可以透明地将外部结构与预先知道的基本操作集成在一

Macros 如何为记事本++;?

我想为Notepad++编写一个宏,它应该分别用char4、char5、char6替换char1、char2、char3。这篇文章可以帮助您了解一些相关信息: 假设使用字母数字单词,您可以使用: 搜索=^([A-Za-z0-9]+)$ Replace=可替换:“\1” 或者,如果您只想突出显示行并在选择中使用“全部替换”和“替换”(使用相同的替换): 搜索=^(+)$ ^指向行的起点。 $指向该行的末尾 \1将是括号内的源匹配。记事本++中的宏只是一组编码操作:开始录制,操作缓冲区,可能激活菜

Macros 强制Source Insight识别新宏

可以在Source Insight中创建用户定义的宏。据知情人士透露: 宏保存在扩展名为.EM的文本文件中。这些文件将添加到项目、项目符号路径上的任何项目或基础项目中。宏文件成为项目的一部分后,文件中的宏功能将作为用户级命令在“键指定”或“菜单指定”对话框中可用 在处理项目时,我从Source Insight下载了一个宏文件,并将其与扩展名.em一起保存在基本项目中。但是,当我打开“关键点指定”对话框时,它没有出现 然后我同步了项目中的文件,但宏仍然没有出现。我甚至重建了我的项目,但宏仍然没有出

Macros 如何让NVCC包含宏定义信息?

通常,使用gcc,您可以使用-g指定调试信息的级别,如果使用-g3,它将在可执行文件中包含预处理器宏定义,像gdb这样的调试器可以读取并允许您在调试期间使用这些定义。我想用nvcc来调试CUDA程序 我目前正在修改SDK中的模板程序,因此使用默认的Makefile和Makefile中包含的common.mk。在“ifeq($(dbg),1)”块中的common.mk中,我尝试了以下方法: 将-g3置于公共标志下 将-g3置于NVCCFLAGS下 将-g3置于CXXFLAGS和CFLAGS下 将

Macros 检查typedef别名的值

我正在尝试编写一些DSP代码,这些代码需要在浮点和定点环境中运行,数字类型将在编译时确定。我想使用宏或typedef为特定的数字类型别名。乘法、除法和其他数学函数在实现中会因数值类型的不同而有很大的不同,因此我需要某种类型的开关来确定是否包含某些头,或者根据数值类型更改实现 我将给出一个简短的代码片段作为示例 typedef samp_t float; // or #define samp_t float (bad naming practice?) // An alternative in

Macros 球拍宏如何将椭圆传递给辅助函数?

鉴于: 如何接收辅助对象中的图案和省略号?我甚至不确定包裹尸体是否。。。inside()是正确的,但我已经看过了,它是唯一不会崩溃的东西 process body过程以包含额外()的语法结束。我可以试着把它拆开,但我只是想知道正确的方法是什么 processbody在body模式之前和之后使用一些代码进行包装。与define类似,我希望能够为宏提供多个表单,而不是一个列表中的所有表单。所以,如果给定(form1)(form2),其中form2是省略号,进程体应该(做某事)(form1)(form

Macros 完全展开宏窗体

我想学习Lisp的内部结构,所以我想看看每件事情是如何实现的 比如说, (macroexpand '(loop for i upto 10 collect i)) 给我(在SBCL中) 但LOOP-BODY、WITH-LOOP-LIST-COLLECTION-HEAD等仍然是宏。如何完全展开宏窗体?您可以尝试使用MACROEXPAND-ALL,但您可能得到的并不一定有用 在类似于LOOP的情况下,真正重要的是宏本身,而不是生成的代码。(注意:如果您对可移植性不感兴趣,SBCL提供macroex

Macros NSI脚本:使用insertmacro从另一个宏调用一个宏时出错

我试图在NSI脚本中从另一个宏调用1个宏。两个宏都有MB_ok cancel。编译时会出现以下错误: ** [exec]错误:函数中已声明标签“abort_inst:” ** 请提供帮助(下次,请确保您的代码不会出现奇怪的换行) 插入宏时,之间的所有代码!宏和!macroend将取代您的!插入宏。因此,不应在宏中使用静态标签–只能插入宏一次(使宏无意义!)可以使用相对跳转(例如Goto+2)或通过向标签添加参数使标签动态,例如: !macro myMacro param1 ${param

Macros 如何在SISC/Scheme中创建生成另一个宏的宏?

在Guile中或使用SRFI-46时,可能会出现如所示的情况。但在SISC或“纯方案”R5R中有可能吗 我知道不使用省略号是可能的,但是如果我需要像下面的例子那样使用内部省略号呢 (define-syntax define-quotation-macros (syntax-rules () ((_ (macro-name head-symbol) ...) (begin (define-syntax macro-name (syntax-rule

Macros AX-如何从缓存刷新宏

AX宏似乎仍在缓存中 我在AOT中定义了一个宏,并在类声明中声明了它 因为我需要更改其中一个值 我想强制所有用户在重新打开AX时获取新值 但用户仍在获取宏的旧值 宏定义:TestMacro 类声明:TestClass 尝试的解决方案: 删除与TestClass相关的使用数据(针对所有用户):失败 从类声明中删除并重新添加宏:已工作 关于如何在AX中刷新宏缓存的其他一些想法?据我所知,没有专门用于宏的缓存,而是一个缓存所有AOT对象的对象缓存。您可以使用工具>开发工具>应用程序对象>刷新字典/AO

Macros 在宏中使用列标题映射列

我有两张工作表。我必须根据列名将值从第二个工作表复制到第一个工作表。 对于从G列到C列的应对策略数据,我使用- 如果Wks2.Range(“C”和I)Wks.Range(“G”和J).值,则 Wks2.范围(“C”和I).值=Wks.范围(“G”和J) 如果结束 但这里的问题是,列序列在secong one中不断变化。所以映射不能硬编码在列字母表上。 我不知道如何使用列标题映射它们。 提前谢谢。您可以在标题中搜索ColumnName。找到匹配项后,检索其行作为引用 Dim cellRef作为整数

Macros Elixir:生成捕获所有函数调用

我有一个宏,它将catch all函数放在模块的末尾,因此生成的模块类似于: defmodule Module1 do <module body> ## Generated catch-all functions def fun1(_, _), do: :ok ## ..more catch-all functions...## end ## of module 在模块的主体中 我想在生成catch-all函数之前,我可以遍历模块的主体AST并对函数签名进行

Macros 子集数据集时使用sas宏中的where

我试图在子集数据集时使用宏中的where option mprint mlogic; %macro subset_by_make (dsn, make); data temp; set &dsn(where = (make = &make)); run; %mend subset_by_make; %subset_by_make(sashelp.cars, Acura); 但是我得到一个错误,

Macros 测试符号是否是宏中的哈希表

我想构建一个宏,它可以根据作为参数提供的符号类型扩展为不同的形式。一个小的可复制示例(其中两个,实际上……在sbcl和ccl上失败)如下所示: λ (defmacro what-am-i (a-thing) (etypecase a-thing (list `(format t "im a list")) (vector `(format t "im a vector")) (hash-table `(form

Macros 宏模式不匹配

因此,我有一个用于制作对象的宏,它的用法如下: (define ob (class (a 10) (b 20) (set-a! (lambda (x) (set! a x))) (set-b! (lambda (x) (set! b x))) (foo (lambda (x) (* (+ a b) (- a b)))))) (ob 'a) -> 10 (ob 'b) -> 20 (ob 's

Macros 在common lisp中,是否有一种方法可以为宏编写“应用”等效代码?

我有一个宏:mac1&rest args,它接受任意数量的参数 既然我不能对宏使用apply,而且我对宏的实现没有控制权,那么如何使给定列表的函数fun1 lst使用扩展列表调用宏呢 更新:我认为这个问题已经足够了,但最好陈述一下我的真实情况: 后现代提供了查询宏: macro: query (query &rest args/format) 例如,您这样称呼它: 质疑 从col1=$1::integer和col2=$2::date的示例中选择* 123 2017-01-01 :st

Macros 在Elixir宏中使用防护装置

我正在研究宏,它将采用一个函数并添加一些附加功能。例如: 这: 应转换为: def this_works(a, b) do IO.puts("LOGGING whatever") a + b + 1 end 这就是我目前所拥有的。尝试在iex中运行这段代码: defmodule MyMacro do defmacro defstate(ast, do: block) do {fn_atom, _} = Macro.decompose_call(a

Macros 展开汇流UI的全部展开宏

我已经在谷歌和Atlassian论坛上搜索过这个问题,但在任何地方都没有找到答案 我正在尝试为UI展开(重要提示:不是常规展开)宏设计一个“全部展开”按钮 我找到了。我一直在搞乱它,但我还没能让它在我的合流页面上运行。我怀疑部分问题在于UI扩展命名约定——假定常规扩展宏的链接使用“.Expand control”,但我想知道它是否需要类似于UI扩展、UI扩展控制、RWUI等。我尝试了不同的组合,但没有成功 还有其他人见过这个吗?有人发现了吗 提前谢谢…我想出来了!正确的类名是rwui\u exp

Macros 使用特殊变量作为宏输入?

我想制作一个宏,用于将变量绑定到给定var列表和val列表的值 这是我的密码- (defmacro let-bind (vars vals &body body) `(let ,(loop for x in vars for y in vals collect `(,x ,y)) ,@body)) 虽然如果调用like(让bind(ab)(12)…),它可以正常工作,但是调用

Macros 如何匹配锈蚀';宏中的s`if`表达式?

我试图编写一个宏来重写特定的防锈控制流,但我很难匹配if表达式。问题是谓词是一个表达式,但是expr后面不允许有块或{ 我最好的办法就是使用tt: macro_rules! branch { ( if $pred:tt $r1:block else $r2:block ) => { if $pred { $r1 } else {

Macros 方案(Kawa)-如何在另一个宏中强制宏扩展

我想制作一个宏,当在类定义中使用它时,会创建一个字段、一个公共setter和一个注释。然而,宏似乎没有扩展,主要是因为它在其他(类定义)宏中使用 下面是一个示例,说明如何使用一个字段定义类: (define-simple-class test-class () (foo :: java.util.List )) 我的宏(目前仅定义字段): 但是,如果我尝试使用它: (define-simple-class test-class () (autowire java.util.Li

Macros 是否可以有一个同时包含程序宏和逻辑的板条箱?

当您想要共享使用过程宏的库时,双板条箱方法是否不可避免 我想提供一个包含逻辑和宏的板条箱。我尝试的第一件事是: my_proc_宏 ├── 货舱 ├── src/lib.rs └── 我的箱子 ├── 货舱 └── src/lib.rs 在my_proc_macro板条箱中,我试图pub使用my_板条箱::*

Macros 公共Lisp宏中的闭包

在下面的代码中,如何使x和y变量反映在宏调用时给出的表达式 (defmacro defrule (init-form &rest replication-patterns) (let (rule-table) `(destructuring-bind (p x y) ',init-form #'(lambda (w h) (list x y))))) 展开呼叫时,如: (defrule (70 (* 1/2 w) (+ h 3))) 它返回: (DESTRUC

Macros 对宏进行操作的预处理器宏?

以下是我的宏示例: #define STR(val) #val #define STRX(val) STR(val) #define LINE_ STRX(__LINE__) #define SRC_STR __FILE__":"LINE_ #define SRC_STRN SRC_STR"\n" #define PRINT_IF(cond) ((cond)&&(printf("\""#cond"\" is true: "SRC_STRN)>=0)) #define PR

Macros 为RabbitMQ fanning重构Clojure代码中的冗余

我正在运行关于它们的RabbitMQ教程,作为练习,我试图重构它们提供的示例,使它们更具通用性和可组合性。我被第二个“blabbr”示例卡住了。下面是我想要重构的函数: (defn -main [& args] (let [conn (rmq/connect) ch (lch/open conn) ex "nba.scores" users ["joe" "aaron" "bob"]] (le/declare

Macros 将语法列表用作函数的形式参数

这是一个场景:给定一个形式为[sym…](例如[ab]和[ab cd])的模式,我希望生成(使用宏)函数来连接模式中的符号,但也将它们作为参数提供。例如,[ab]转换为某种形式 (define (ab a b) body) 在某些情况下,有人通过名为信号列表的语法类帮助我生成函数名。在下面的代码中,我可以将信号模式变量与形式为(sig…)的模式匹配,然后使用它生成所需的函数定义 (define-syntax (define-something stx) (syntax-parse s

Macros 如何在Kentico CMS中从预览模式解析宏

我需要显示一个文本编辑小部件的设置键,它在预览模式下运行良好。但在CMS内部,它只显示宏代码。 在CMS和live site中,有没有办法在预览模式下运行宏?宏代码将仅在编辑模式下显示,否则您将无法编辑或知道存在宏。一旦系统在预览或实时站点模式下运行,它将毫无问题地呈现(假设您有一个有效的宏)。如果您试图测试或调试宏,您可以转到系统>宏>控制台或基准测试获得它。非常感谢。但是我认为我们还有另一种方法可以通过查看Source来编辑它们是的,您可以通过单击Source按钮来编辑它们,但是您不能以这种

  1    2   3   4   5   6  ... 下一页 最后一页 共 20 页