如何定制Racket的#lang语言?添加或移除部分定义
自定义基于htdp/isl的语言
要实现只写#lang my-modified-isl就能同时获取原语言内容和自定义定义,按以下步骤操作:
创建自定义语言模块
新建一个名为my-modified-isl.rkt的文件,内容如下:#lang racket/base ; 导入原htdp/isl语言的全部内容 (require htdp/isl) ; 导入你需要添加的自定义定义模块(如果定义不多,也可以直接写在这里) (require "your-custom-defs.rkt") ; 导出原语言所有内容+自定义定义 (provide (all-from-out htdp/isl) (all-from-out "your-custom-defs.rkt"))如果自定义定义较少,可直接写在该文件里,示例:
#lang racket/base (require htdp/isl) ; 直接添加自定义定义 (define (triple x) (* x 3)) (define DEFAULT-DELAY 1000) (provide (all-from-out htdp/isl) triple DEFAULT-DELAY)注册自定义语言
在同一目录下创建info.rkt文件,声明语言入口(确保Racket能识别你的自定义语言):#lang info (define language-info '((#:lang my-modified-isl) (#:reader racket/base-reader) ; 使用常规阅读器,符合要求 (#:module "my-modified-isl.rkt")))使用自定义语言
现在在任意Racket文件顶部写#lang my-modified-isl,就能直接使用htdp/isl的所有功能,以及你添加的自定义定义:#lang my-modified-isl ; 直接调用原语言函数和自定义定义 (triple 4) ; 输出12 (list-ref (list 1 2 3) 1) ; 输出2,来自htdp/isl
内容的提问来源于stack exchange,提问作者Daniel Patterson
相关产品推荐
相关产品推荐

