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

了解Scheme宏的来源:define-syntax和syntax-rules

了解Scheme宏的来源:define-syntaxsyntax-rules

Scheme是一种编程语言,它的宏系统是基于define-syntaxsyntax-rules的。在Scheme中,宏是一种特殊的语法形式,它允许用户扩展语言的语法。宏可以用来定义新的语法形式,或者用来修改已有的语法形式。

define-syntax是定义宏的基本方法,它接受两个参数:宏的名称和宏的转换规则。宏的转换规则是一个函数,它接受一个语法对象,并返回一个新的语法对象。define-syntax可以用来定义任何类型的宏,包括宏和模式匹配宏。

syntax-rules是定义模式匹配宏的方法,它接受一组模式和一组模板,并返回一个宏转换规则函数。在模式匹配宏中,宏的输入会被与模式进行匹配,如果匹配成功,则使用模板生成新的语法对象。syntax-rules宏通常用来定义简单的宏,例如let宏和case宏。

总之,了解Scheme宏的来源需要熟悉define-syntaxsyntax-rules这两个基本的宏定义方法,以及它们在Scheme语言中的应用。

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

相关·内容

走进 racket(lisp) 的世界

我对编程语言的接触大致分成三种「境界」: ✓ 浅尝辄止:了解一下语言设计的理念,基本功能,使用场景,写写一些基本的程序。...从一开始看racket的文档起,我就把它定位为一个「浅尝辄止」的周末语言,因为有clojure的前车 —— 学会了基本的语法后便无法继续深入 —— 我并未对自己深入了解racket有任何企盼。...racket是一个lisp [1] 家族的语言,祖上是common lisp [2] 对立的阵营scheme [3],起初为教学的目的而创立。...但是,单单看racket本身的文档(全为scribble生成),就能感受到它的强大。 接下来是plot和slideshow。也许更深入地了解后我会写篇「plot技术哪家强」的文章。...我的racket之旅刚刚开始,希望这份热情随着自己对 define-syntax 的深入了解能够继续下去。等有了更多的心得后,在撰文表述。:)

2.5K30

iOS--React Native浏览器插件(内附Demo)

iOS和安卓两大平台。...在React Native移动平台项目开发中,除了React Native 提供的封装好的部分插件和原声组建外,在实际的项目中还需要使用到很多其他的插件,比如网络请求、数据库、相机、相册、通讯录、视频播放器...另外,这些博文都是来源于我日常开发中的技术总结,在时间允许的情况下,我会针对技术点分别分享iOS、Android两个版本,如果有其他技术点需要,可在文章后留言,我会尽全力帮助大家。...添加RCT_EXPORT_MODULE()宏 为了实现RCTBridgeModule协议,Webview的类需要包含RCT_EXPORT_MODULE()宏。...URL规范检测 arguments字典是JavaScript调用方法传参用的,arguments字典里面的具体字段可以和JavaScript约定好,打开浏览器的url就是通过arguments字典传过来的

1.3K20
  • 工程管理篇 | APP环境分离的实现

    前言 如何实现在同一台手机能同时安装同个应用的测试和生产版本?应用名称要有区分,图标也要有所区别。不要手动修改Bundle id和应用名称,也不要手动替换图标,更不要维护两个项目。...即是说,每个Target代表一个编译的产品。每个Target,可以有不同的编译源文件和资源文件。 那么,实现环境分离的方案,就是分别建立测试环境和生产环境的两个Target。...(2)修改scheme则可以在Xcode左上角的Run\Stop按钮右边的scheme列表菜单中选择Manage Schemes,打开弹出框, 选中某个Scheme后,再点击一下即可编辑修改名称...(注意这里的productname 是工程最外层文件夹的名称不是Target的名称也不是Scheme的名称。) 修改Target配置 接下来,就要修改Target的配置,实现真正的环境分离了。...定义了一个预编译宏,宏名称为BETA。

    68620

    Xcode多环境配置

    是一个项目的整体,相当于一个仓库,包括了所有的代码和资源文件; Target:相当于一个具体的产品,包含了对于代码,资源文件的具体使用规则和配置; Scheme: 对指定Target的环境进行配置;...; 二、多Target 配置 1.总结特点 优点:方便管理代码,资源文件,比如在Compile Sources、Copy Bundle Resources里根据需要增加或者删除需要编译的代码和资源; 缺点...:配置繁琐,涉及多个info.plist文件、宏定义等,大量的修改人容易错乱; 2.基本步骤 1.创建新target 选中已有target,右键选择Duplicate,会拷贝创建出与原Target相同配置的新...Manager,修改Scheme的名字,这里并非必须,修改是为了更加方便识别; 4.为了区别不同的Target,增加预定义宏 配置OC工程:Build Settings -> Preprocessor...我们在run的时候,就可以手动切换configration使用不同的环境; 3.多Scheme 每次手动切换configration较为繁琐,我们还可以使用不同的Scheme直接对应不同的配置; 4

    1.2K42

    iOS如何实现多个环境一次打包

    2,新建Scheme ? 新建完成之后,我们就可以编辑刚刚新建的Scheme,我们可以把Run模式和Archive都改成新建Scheme。 ?...在打包的时候,一定要注意将Scheme的名字和编译方式区分开。选择一个Scheme,只是相当于选择了一个环境,并不是代表这Debug还是Release。 ?...Preprocessor Macros可以根据不同的环境预先制定不同定义的宏。 ?...Preprocessor Macros 其实是按照 Configuration 选项进行默认配置的, 它是可以根据不同的环境预先制定不同定义的宏,或者为不同环境下的相同变量定义不同的值。...这其实类似于cocopods的做法。详情资料请大家自行搜索。 利用Targets配置多环境 其实使用Scheme和xcconfig就可以实现多环境的功能,使用Targets反而显得更加麻烦。

    1.9K60

    iOS如何实现多个环境一次打包

    2,新建Scheme ? 新建完成之后,我们就可以编辑刚刚新建的Scheme,我们可以把Run模式和Archive都改成新建Scheme。 ?...在打包的时候,一定要注意将Scheme的名字和编译方式区分开。选择一个Scheme,只是相当于选择了一个环境,并不是代表这Debug还是Release。 ?...Preprocessor Macros可以根据不同的环境预先制定不同定义的宏。 ?...Preprocessor Macros 其实是按照 Configuration 选项进行默认配置的, 它是可以根据不同的环境预先制定不同定义的宏,或者为不同环境下的相同变量定义不同的值。...这其实类似于cocopods的做法。详情资料请大家自行搜索。 #利用Targets配置多环境 其实使用Scheme和xcconfig就可以实现多环境的功能,使用Targets反而显得更加麻烦。

    2.4K80

    日拱一卒,伯克利CS61A,作业10,用Lisp开发宏

    原始文档:https://inst.eecs.berkeley.edu//~cs61a/sp18/hw/hw10/ 这次的作业一共有3题,难度不大,是scheme的拓展练习,主要让我们尝试使用scheme...我们看下老师给的求阶乘的例子: 我们的做法本质上和这一样,将中间结果传递进递归当中,而不是递归结束之后进行计算。...整个代码的结构和刚才是一样的,只不过细节上有所变化,但就是这一点不起眼的小细节,优化了运行效率。...比如,我们像这样使用list comprehension的宏 提示:你也许会需要用到map和filter过程 完成开发之后,进行测试: python3 ok -q list-comp 答案 这题需要我们使用...也就是说宏返回的是待执行的代码,当我们调用宏的时候,其实有两个步骤,一个步骤是调用define-macro拿到待执行的代码,还有一个执行代码拿到结果的步骤。

    68330

    工程管理篇 | 多Targets

    其它知识补充 workspace 、Project、target、 Scheme 的关系和简介 workspace 是Xcode的一种文件,用来管理工程和里面的文件,一个workspace...可以包含若干个工程 project 里面包含了所有的源文件,资源文件和构建一个或者多个product的信息。...scheme 定义了编译集合中的若干target,编译时的一些设置以及要执行的测试集合。我们可以定义多个scheme对应一个target。...通过在不同的Targets 预定义宏(Build Setting–>Preprocessor Macros)区分不同的工程环境 这个宏是一个全局宏,在所有/整个工程的代码中都是有效的,我们可以在这里添加上环境与处理的宏...生成一个新的target,一定会与原target有区别,这里可以定义预编译宏,来区分两个版本的不同代码,预编译宏可以在Build Settings中Preprocessor Macros定义,比如在我们新建的

    1.1K21

    编码篇-学会小用宏和条件编译

    前言 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行。...而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多。 编译时编译器会在语义分析认定是宏后,将形参替换为实参,这个过程称为宏的展开。...宏的分类使用 一般宏分为两类 对象宏(object-like macro)和函数宏(function-like macro)。 对象宏:对于对象宏来说确实相对简单,一般用来定义一些常数。...所以条件编译的条件一般是利用宏定义,因为宏定义和条件编译都是编译之前进行的。...NSLog(@"生产环境"); } 我们可以通过设置多个环境,每一种环境下的值不同; 生成多个Scheme,每一个Scheme对应一种环境和配置; 这样切换Scheme 即可切换到不同的环境下

    77720

    如何成为优秀程序员?

    如何成为一名更优秀的程序员 同事和粉丝们很多人都让我莫名的认为我是一名非常资深厉害的程序员。我觉得可以分享一下,自己多年如一日的编程“思维”。...学习Scheme,非常简单的语言,它会强迫你以函数式的方式完成所有事情,并真正了解代码工作的基本原理。让我对代码的看法发生根本性改变。 7 建议做的6大事 这些都会对程序员生涯产生重大影响。...写个编译器——可能你很不爽,可看看super tiny compiler项目 学习宏——参考 Scheme、Lisp 或 Clojure(脚本)。...宏会真正改变你对代码的看法 SICP——一本旧书,我认为直到今天仍然很有价值(有些人或许不赞成这个观点)。...编译器方面做过深入研究的书是 Lisp In Small Pieces 了解 Continuations:一种低级的控制流机制。Scheme 是唯一实现它的语言。

    6300

    《最新出炉》系列小成篇-Python+Playwright自动化测试-67 - 模拟手机浏览器兼容性测试

    为选定的台式机、平板电脑和移动设备提供服务。...) # Change color scheme for the page page.emulate_media(color_scheme='dark') # Change media for page...好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。...哦,对了差点忘记了在实际演示过程中,宏哥的遇到的一个小问题,就是因为比较熟悉百度的搜索框和搜索按钮的定位元素,所有宏哥就按之前电脑网页的百度首页,进行了定位,结果运行代码,出现手机屏幕的窗口,但是没有按照预想的执行搜索...纠结了半天恍然大悟,可能手机端的定位元素和电脑端的定位元素不一样,结果就是这样的。

    22420

    Android包管理机制(一)PackageInstaller的初始化

    前言 包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。...讲到APK的安装之前,先了解下PackageManager、APK文件结构和安装方式。...1.PackageManager简介 和ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能,最终的功能是由PMS来实现的...,界面上有确认和取消按钮并会列出安装该APK需要访问的系统权限。...PackageInstallerActivity中会对未知来源进行处理,如果允许安装未知来源或者根据Intent判断得出该APK不是未知来源,就会初始化安装确认界面,如果管理员限制来自未知源的安装, 就弹出提示

    1.9K30

    iOS开发xconfig和script脚本使用详解

    Xcode scheme 一个project可以有多个target,但是当前的target只能有一个,scheme就是用来确定当前的target的,并制定当前的target使用哪种configuration...测试是否生效 在Scheme页面分别选择debug,release和mamba三中不同的Configuration环境运行APP成功的根据不同的Configtation设置不同的项目运行名字。...,上述宏定义一般定义在.pch中,通常.pch文件中定义的宏都比较杂乱,希望能单独放在一个独立的文件中,可以通过新建一个头文件env.h, 把上述宏定义放到env.h中,在需要使用的时候导入头文件即可,...Common.xconfig中第一个键的配置必须有:GCC_PREPROCESSOR_DEFINITIONS = (key)':通过key来指定每个模式下的对应的自定义键的名字,通常将宏的名字和key的名字保持一致....xconfig文件进行获取我们需要的宏。

    2.8K10

    手把手教你给一个iOS app配置多个环境变量

    新建完成之后,我们就可以编辑刚刚新建的Scheme,这里可以把Run模式和Archive都改成新建Scheme。如下图: ?...我们还需要在Images.xcassets里面新添加2个New iOS App Icon,名字最好和scheme的名字相同,这样好区分。 ?...的名字和编译方式区分开,选择了一个Scheme,只是相当于选择了一个环境,并不是代表这Debug还是Release。...我建议Scheme只配置环境,而进来的Run和Archive来配置Debug和Release,我建议每个Scheme都按照上图来,Run对应的Debug,Archive对应的Release。...只需要在每个不同的Targets里面加入不同界面的代码进行编译就可以了,在跳转的那个界面加上宏,来控制不同的app跳转到相应界面。

    1.1K40

    理财App无法上架?马甲包VS金融许可证资质上架方案哪个更靠谱?

    增加关键词覆盖数 App Store关键词长度上限是100个字符,据了解人为正常优化的极限是关键词覆盖数在4000左右,那些覆盖数在8000+的都是利用了苹果漏洞。...1.新建Configuration 点击Project->Info,默认有Debug和Release两个Configuration,顾名思义Debug用于调试,Release用于发布,区别是Debug默认添加了预编译宏...注意:新建完Configuration之后请重新执行pod install命令 2.新建Scheme 为上一步新建的Configuration再新建Scheme,这里我新建了两个Scheme...勾选Shared 在Edit Scheme里面把Run和Archive模式改成对应新建的Build Configuration 3.配置AppIcon和LaunchImage 新建一个App...,根据这个预编译宏的不同,在代码里面也可以有不同的配置,比如渠道号,接口域名等。

    3.4K80
    领券