Scheme R5RS 5.程序结构

程序

Scheme程序由一系列表达式,定义和语法定义组成。

出现在程序最高层的定义和语法定义可被解释为声明,它们是在最高层环境创建绑定,或者改变已有的最高层绑定的值。

出现在程序最高层的表达式被解释为命令,当程序被调用或被加载时,它们按顺序执行,通常会完成某些初始化的工作。

定义

定义只能出现在程序<program>最高层或<body>的开头

定义的格式:

1. (define <variable> <expression>)

2. (define (<variable> <formals>) <body>)
 等价于:
    (define <variable>
            (lambda (<formals>) <body>))

3. (define (<variable> . <formal>) <body>)
 ※<formal>应为一个单独的变量
 等价于:
    (define <variable>
            (lambda <formal> <body>))

最高层定义

在程序的最高层,如果变量<variable>已绑定,定义
(define <variable> <expression>)
的作用在本质上与下面的赋值表达式相同:
(set! <variable> <expression>)
但如果<variable>未被绑定,定义就会在执行赋值之前将<variable>绑定到一个新的存储位置。反之,在一个未被绑定的变量上执行set!是一个错误。

内部定义

定义可以出现在<body>的开头,即内部定义。它们的作用域是整个<body>

例:
(let ((x 5))                      '第二行开始为<body>部
  (define foo (lambda (y) (bar x y)))        '内部定义
  (define bar (lambda (a b) (+ (* a b) a)))  '内部定义
  (foo (+ x 3)))                       => 45

包含内部定义的<body>总可以被转换为完全定价的letrec表达式。

例:
(let ((x 5))
  (letrec ((foo (lambda (y) (bar x y)))
           (bar (lambda (a b) (+ (* a b) a))))
    (foo (+ x 3))))

语法定义

语法定义只能出现在程序<program>最高层
定义的格式:

(define-syntax <keyword> <transformer spec>)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值