首页
学习
活动
专区
工具
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生成),就能感受到它强大。 接下来是plotslideshow。也许更深入地了解后我会写篇「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。

    68520

    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.1K41

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

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

    1.8K60

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

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

    2.4K80

    工程管理篇 | 多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 即可切换到不同环境下

    76720

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

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

    67030

    如何成为优秀程序员?

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

    5400

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

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

    18620

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

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

    1.7K30

    iOS开发xconfigscript脚本使用详解

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

    2.7K10

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

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

    1K40

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

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

    3.3K80
    领券