Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090188
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类: Python/Ruby

2011-09-17 09:34:34

Scheme最大的乐趣就在于:
  1. 用最少的语法规则搭建一个自己的“语言”
  2. 用这个语言搭建出整个应用程序。
奇葩之处就在于,这个自己搭建的语言可以是函数式的、可以是面向过程的、可以是面向对象的....可以是你想要的某种编程范型的。
以前总是认为lisp系列的语言的小括号太烦,现在终于有点儿体会到,这类语言放弃了什么,获得了什么。

下面是Scheme的核心规则。

<graphic>
*
<graphic> |
<graphic> | (begin *)
<graphic>(define )
<graphic>

|

|(quote )

|(lambda *)

|(if )

|(set! )

|
<graphic> | | |
<graphic>

|(*)

|( * . )
<graphic>( *)


下面是用R6RS的Scheme(里面包含了一些“标准”的语法扩展,如let、cond等)写的一个队列对象:
  1. (library (queue)
  2.    (export make-queue)
  3.    (import (rnrs base))

  4. (define make-queue
  5.    (lambda ()
  6.      (let ((head '()) (tail '()))
  7.        (lambda (msg . args)
  8.          (cond
  9.            ((eqv? msg 'empty)
  10.              (and (null? head) (null? tail)))

  11.            ((eqv? msg 'enqueue)
  12.              (set! tail (cons (car args) tail)))

  13.            ((eqv? msg 'dequeue)
  14.              (if (null? head)
  15.                (begin
  16.                  (set! head (reverse tail))
  17.                  (set! tail '())))
  18.                  (let ((v (car head)))
  19.                  (set! head (cdr head))
  20.              v))

  21.            (else (assertion-violation 'queue "Unsupported operation" msg))
  22.      )))))
  23. );

阅读(1869) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~