美文网首页Lisp
[Racket] racket模块

[Racket] racket模块

作者: 何幻 | 来源:发表于2016-03-03 07:14 被阅读273次

DrRacket分为上下两块,上面的称为definitions area,下面的称为interactions area。
racket语言支持两种等价方式定义模块,#langmodule
#lang racket(module module1 racket …,表示将racket模块中的所有绑定都导入当前模块。
这些初始化绑定决定了哪些符号在模块中是可用的,称为module language。

1. 用#lang,导入模块

(1)1.rkt

#lang racket

(provide add1)

(define (add1 x)
    (+ x 1))

(2)定义区

#lang racket

(require (file "C:/Users/thzt/Desktop/test/1.rkt"))

(3)交互区

> (add1 2)
3

2. 用module导入模块

(1)1.rkt

(module module1 racket
    (provide add1)
    
    (define (add1 x)
    (+ x 1)))

(2)定义区

(module module2 racket
  (require (file "C:/Users/thzt/Desktop/test/1.rkt")))

(3)交互区

> (add1 2)
3

3. 定义lambda演算模块

(1)1.rkt

(module lambda-calculus racket
    (provide (rename-out [1-arg-lambda lambda]
            [1-arg-app #%app]
            [1-form-module-begin #%module-begin]
            [no-literals #%datum]
            [unbound-as-quoted #%top]))
    
    (define-syntax-rule (1-arg-lambda (x) expr)
        (lambda (x) expr))
    
    (define-syntax-rule (1-arg-app e1 e2)
        (#%app e1 e2))
        
    (define-syntax-rule (1-form-module-begin e)
        (#%module-begin e))
        
    (define-syntax (no-literals stx)
        (raise-syntax-error #f "no" stx))
        
    (define-syntax-rule (unbound-as-quoted . id)
        'id))

(2)定义区

#lang racket

(require (file "C:/Users/thzt/Desktop/test/1.rkt"))

(3)交互区

> ((lambda (x) (x z))
   (lambda (y) y))
'z

注:
(1)模块可以使用provideall-from-outexcept-outrename-out来控制模块的输出。
(2)#%app#%module-begin#%datum#%top是racket模块隐含提供的。
#%module-begin在定义模块时,会在模块主体上隐含调用。
(必须被导出,否则使用该模块的模块将不能成为一个合法的module了。)
#%app隐含用于函数调用。
#%datum用于字面量。
#%top用于那些没有绑定的标识符。
(3)上面的例子通过重命名这些隐含绑定,定义了lambda-calculus模块。

相关文章

  • [Racket] racket模块

    DrRacket分为上下两块,上面的称为definitions area,下面的称为interactions ar...

  • 下载,安装,运行,关闭racket

    (下载 racket) 打开racket-lang.org,在这里你可以下载到racket。包含了Drracket...

  • [Racket] Language Model(二):Synta

    The syntax of a Racket program is defined by Racket 程序的语法是...

  • Racket指南

    racket指南面向有编程经验的racket新手。章节2提供了racket概要介绍。从章节3开始,该指南深入细节,...

  • The Little Schemer-CHP1

    在 Windows 下配置环境 在 http://racket-lang.org/ 下载 Racket 并安装 运...

  • 2019-08-11 Mac安装Racket并加入环境变量

    安装Racket Racket是一种通用编程语言,也是世界上第一个面向语言编程的生态系统。 Racket下载的地址...

  • Racket快速浏览

    by Matthew Flatt 本教程通过使用Racket编程语言的一个绘图库对Racket编程语言进行简要介绍...

  • emacs 搭建racket开发环境

    emacs下搭建开发racket的环境,笔者之前用过以下两种模式:geiser和racket-mode。相对而言,...

  • 6.1模块基础

    每个Racket模块都存在自己的文件。 其它模块可以引入cake.rkt来使用print-cake函数,因为pro...

  • 21运行和创建可执行程序

    当开发一个程序的时候,很多racket程序员使用DrRacket环境。为了运行没有开发环境的程序,使用racket...

网友评论

    本文标题:[Racket] racket模块

    本文链接:https://www.haomeiwen.com/subject/rcpnkttx.html