Scheme 与 CAML 的比较 http://learn.tsinghua.edu.cn:8080/2001315450/wiki/SchemeCaml.html
来源:互联网 发布:春老才觉短 别后方知远 编辑:程序博客网 时间:2024/05/19 23:17
Scheme 与 CAML 的比较
区别
类型
- Scheme 继承了 LISP 的传统,没有强制的类型检查机制。一个函 数可以接受任意类型的参数,返回任意类型。这在很多时候是很方 便的。但是有时可能引起不明不白的错误。但是如果需要,Scheme 也可以自己实现类型系统。
- CAML 有强制的类型检查和综合机制。类型检查使得操作更加安 全,但是缺少了某种灵活性。大部分时候不需要指明对象 的类型,解释器可以从上下文判断类型。举一个复杂一点的例子:
#let rec it_list f a = function [] -> a | x::l -> it_list f (f a x) l;;>it_list : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a = <fun>
从这里可以看出。CAML 解释器可以判断:it_list 是一个函数,它接受两个参数,一个是 ('a -> 'b -> 'a) 类型的函数,一个是 'a 类型的数据,it_list 返回一个函数,这个函数接受一个 'b 类型的 list 作为参数,返回一个 'a 类型的数据。
这个判断是怎么做出的呢?解释器首先把 it_list 的参数 a 作为'a 类型,把 x::l 作为 'b 类型的 list。由于 it_list 有规则 []->a, 所以解释器知道 it_list 返回类型应该是接受 'b 类型list 参数,返回 'a 类型的函数。由于 (f a x) 同时可以作为 it_list 的第二个参数,所以解释器知道 f 的返回类型应该是 'a。从 (f a x) 的 a 和 x,解释器可以判断,f 接受两个参数,一个是 'a 类型的数据,一个是 'b 类型的数据。
是否应该使用类型,这个问题不是程序语言自己能够解决的问题。这涉及到对于自然最基本的理性思想和方法论问题。你怎样看待世界上的事物?它们具有类型吗?我们怎样处理共性和个性的差别和联系?
CAML 强制用户把世界上的事物加以区别,这在很多时候是有用的。但是有时这样会导致抹煞事物的共性。Scheme 没有提供类型机制,但是用户可以自己创造类型系统,所以 Scheme 的灵活性要大一些。但是并不是所有用户都有精力去制造自己的类型系统,所以 CAML 更适合某些人的需要。
Curry
Curry 就是一个多元函数接受少量参数,变成一个更少参数的函数。比如 f(x,y)=x+y-1, 接受一个常数 a,就变成另外一个函数 f(y)=a+y-1.
- CAML 提供了 curry 机制,如果传递的参数少,一个函数就返回另 外一个含有更少参数的函数,这个函数又可以接受一些参数。直到 参数数量满足之后,函数才返回计算的结果。比如下面这种Newton method 的实现,本来 until 函数接受3个参数,但是最后的语句 只给了它两句,所以 newton 如果接受两个参数,就会返回一个 float->float 类型的函数。它还可以接受3个参数,第三个就被传 递给 until 返回的那个 float->float 函数作为“初始值”。
let deriv f x dx = (f(x+.dx) -. f(x)) /. dx;;let abs x = if x >. 0.0 then x else -. x;;let newton f epsilon = let rec until p change x = if p(x) then x else until p change (change(x)) in let satisfied y = abs(f y) <. epsilon in let improve y = y -. (f(y) /. (deriv f y epsilon)) in until satisfied improve;;
- Scheme 本身没有 curry 的机制。Scheme 的函数不能根据传递的 参数的多少进行变化。虽然有宏机制可以扩展出这种功能,但是不 是每个用户都有精力来自己实现这种功能。
- Scheme 与 CAML 的比较 http://learn.tsinghua.edu.cn:8080/2001315450/wiki/SchemeCaml.html
- http://www.tup.tsinghua.edu.cn/booksCenter/book_05837401.html#
- http://dsec.pku.edu.cn/~yuhj/wiki/gdb.html
- 关于Warning: 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/' already的解决方法
- http://chenhaifeng.blog.edu.cn/
- http://zjc.wuse.edu.cn/
- ubuntu 下php的安装配置 转自http://dsec.pku.edu.cn/~lyj/Programming/configure_php.html
- http://www.sudu.cn/info/html/edu/20071107/7028.html shell
- http://www.mscenter.edu.cn/blog/posts.html?cateid=93
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 搜索引擎开源项目技术准备 http://oss.lzu.edu.cn/blog/article.php?tid_246.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- 微软在全国高校举办Silverlight大赛: http://www.msuniversity.edu.cn/static/silverlight/index.html
- IT经理激励员工的101招
- VS2005 之Super Diff Utility 体验
- MapX 创建新的永久图层。
- Intel集成显卡的兼容性问题
- 不要迷失在技术的海洋中
- Scheme 与 CAML 的比较 http://learn.tsinghua.edu.cn:8080/2001315450/wiki/SchemeCaml.html
- ubuntu 7.04 IP设置
- [c/c++]析构函数virtual相关
- CSDN的登录系统之用户体验测试
- Gnu Common Lisp for Microsoft Windows http://www.cs.utexas.edu/users/novak/gclwin.html
- MapX 设置投影。
- 英文简历中的常用语
- 看日剧
- 什么是模式?什么是框架?