-
Notifications
You must be signed in to change notification settings - Fork 6
Home
Hu Lang edited this page Apr 14, 2017
·
3 revisions
控制复杂度的工程方法有:黑盒抽象,约定接口和元语言抽象
为了这些,一种强大的编程语言作为框架应具有的三大机制和其中数据和过程的维度,表格如下(举例):
-
:
/ 过程 数据 基本元素 +<35.6组合的手段 ()ifpair抽象的手段 define...
目前的支持:
-
变量引用
<variable> -
局部变量
let -
常量引用
quote,' -
过程调用
(operator operand ...) -
过程
lambda- 支持固定数量参数, 任意数量参数和n个或更多不定数量参数
- 抄录了JavaScript语言中的隐含参数
arguments和callee
-
静态(词法)作用域
-
闭包
-
定义
define -
赋值
set! -
顺序结构
begin -
条件表达式
if,cond,case,when,unless,and,or -
递归
-
迭代结构
命名let,do,while,for -
标准过程
- 相等谓词
eqv?,eq?,equal? - 数值运算和数值输入/输出
number?,
=,<,<,>,<=,>=,
+,*,-,/,zero?,positive?,negative?,odd?,even?,abs,remainder,
number->string,string->number- 整数
integer? - 实数
real?
- 整数
- 其它数据类型
- 布尔
boolean?,not - 序对和表
pair?,cons,car,cdr,set-car!,set-cdr!,
caar,cadr...cdddar,cddddr(car和cdr的组合,定义到第四层),
null?,list?,list,length,append,reverse,list-tail,list-ref,memq,memv - 符号
symbol?,symbol->string,string->symbol,symbol->string-ci - 字符
char?,char=?,char-upper-case?,char-lower-case?,
char-upcase,char-downcase - 字符串
string?,make-string,string,string-length,string-ref,string-set!,
string=?,string-ci=?,substring,string-append,string->list,list->string,
string-copy,string-fill!
- 布尔
- 控制特征
procedure?,apply,map,for-each,
void,void? - 求值
eval,interaction-environment - 输入/输出
read,write,newline,display,
error
- 相等谓词
-
注释
单行注释:;line comment
- 基础语言JavaScript的能力
-
将Scheme代码放在
script标签中,该标签具有两个属性:type="text/scm"和ignore。
type属性是必须的,其值"text/scm"是我们自定义的,它表示内容是Scheme而非JavaScript代码;
ignore属性是可选的,如果存在该属性,则其标签中的Scheme代码不会被自动执行。
下面是例子:<script type="text/scm"> (alert "hello scheme") </script> <script type="text/scm"> (define gn 3) </script> <script type="text/scm" ignore> (set! gn (+ gn 1) </script> <script type="text/scm"> (set! gn (+ gn 1) </script> <script type="text/scm"> (alert gn) (define (factorial n) (if (< n 2) n (* n (callee (- n 1))))) (define n (prompt "input n")) (alert (string-append "!" n (string #\=) (number->string (factorial (string->number n))))) </script>
-
在所有scheme代码之后,引入broswer-load.js和scm.js:
<script src="../jsscheme/browser-load.js"></script> <script src="../jsscheme/scm.js"></script>
browser-load.js定义了一个函数
loadScheme,该函数加载JSScheme到浏览器环境。
scm.js会扫描出所有的包含属性type="text/scm"和ignore的脚本,然后在同一个Scheme全局环境里,顺序执行脚本中的Scheme程序。 -
上面的例子程序运行会弹出 hello scheme 和 4 。