文档章节

scheme实现的支持5种语法形式的for macro

firebroo
 firebroo
发布于 2014/09/25 14:17
字数 201
阅读 89
收藏 0
#lang racket

(define-syntax for
  (syntax-rules (in : as)
    ((_ (i : list) body ...)
     (map (lambda (i)
            body ...)
          list))
    ((_ i in list body ...)
     (map (lambda (i)
            body ...)
          list))
    ((_ list as i body ...)
     (map (lambda (i)
            body ...)
          list))
    ((_ (i from to) b1 ...)
     (let loop [(i from)]
       (when (< i to)
         b1 ...
         (loop (+ 1 i)))))
    ((_ (i from to step) b1 ...)
        (let loop [(i from)]
          (when (< i to)
            b1 ...
            (loop (+ i step)))))))

(for (i : '(0 1 2 3 4 5))
    (print i)
    (newline))
(newline)

(for i in '(0 1 2 3 4 5)
    (print i)
    (newline))
(newline)

(for '(0 1 2 3 4 5) as i
    (print i)
    (newline))
(newline)

(for (i 0 5)
  (print i)
  (newline))
(newline)

(for (i 0 10 2)
  (print i)
  (newline))

>>

欢迎使用 DrRacket, 版本 6.0.1 [3m].

语言: racket [自定义]; memory limit: 500 MB.

0

1

2

3

4

5

'(#<void> #<void> #<void> #<void> #<void> #<void>)


0

1

2

3

4

5

'(#<void> #<void> #<void> #<void> #<void> #<void>)


0

1

2

3

4

5

'(#<void> #<void> #<void> #<void> #<void> #<void>)


0

1

2

3

4


0

2

4

6

8


© 著作权归作者所有

firebroo
粉丝 18
博文 28
码字总数 16581
作品 0
杭州
程序员
私信 提问
Lisp语言的分支 - Racket

Racket源自著名的专家型语言PLT Scheme,同时又是Lisp语言的一个分支。它适用于从脚本Script到应用程序开发的任务执行工具,包括图形用户界面,Web服务器等。支持编译器的虚拟机,创建独立的...

匿名
2012/05/28
10.4K
2
深入浅出 Babel 下篇:既生 Plugin 何生 Macros

接着上篇文章: 《深入浅出 Babel 上篇:架构和原理 + 实战 🔥》 这篇文章干货不少于上篇文章,这篇我们深入讨论一下宏这个玩意 —— 我想我们对宏并不默认,因为很多程序员第一门语言就是 ...

_sx_
10/12
0
0
Python实现的Scheme方言--SchemePy

Python实现的Scheme方言,支持宏、continuation、lambda、各种基本类型等等,可以直接Python解释执行,也可以编译到JavaScript。编译到JS可以与JavaScript动态交互(互相调用),支持浏览器和...

zoowii
2013/07/01
925
0
GCL笔记01-LISP基础知识

LISP两大方言系:Common Lisp以及Scheme Lisp(以下简称cl与scheme),之所以说是方言系,是因为LISP语言具有很高的灵活性,语法很容易转化成另一种形态,每一个语法系都有众多的版本实现。 ...

兰穆达
2012/05/23
232
2
一篇很全面的freemarker教程(真心很全)

reeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,...

浮躁的码农
2015/09/16
487
0

没有更多内容

加载失败,请刷新页面

加载更多

【jQuery基础学习】05 jQuery与Ajax以及序列化

本文转载于:专业的前端网站➭【jQuery基础学习】05 jQuery与Ajax以及序列化 好吧,这章不像上章那么水了,总是炒剩饭也不好。 关于AJAX 所谓Ajax,全名Asynchronous JavaScript and XML。(也...

前端老手
26分钟前
10
0
CVE-2019-14287(Linux sudo 漏洞)分析

作者:lu4nx@知道创宇404积极防御实验室 作者博客:《CVE-2019-14287(Linux sudo 漏洞)分析》 原文链接:https://paper.seebug.org/1057/ 近日 sudo 被爆光一个漏洞,非授权的特权用户可以...

极客君
26分钟前
7
0
关于分布式,你需要知道的真相

目录 一、分布式锁 数据库的唯一索引 Redis 的 SETNX 指令 Redis 的 RedLock 算法 Zookeeper 的有序节点 二、分布式事务 2PC 本地消息表 三、CAP 一致性 可用性 分区容忍性 权衡 四、BASE 基...

李红欧巴
26分钟前
8
0
读书笔记:深入理解ES6 (附录B)

附录B:了解ES7(2016)   ES6经历了4年的发展,之后TC-39决定将发布周期转换为每年一版,以确保新语言特性能够更快地发展。   ES6中添加了三个语法特性,下面一一来讲。 第1节 指数运算...

张森ZS
32分钟前
13
0
计算机公开课推荐 2019.8

欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 编程 哈佛 CS50:计算机科学导论 视频 MIT 6.00.1x:计算机科...

ApacheCN_飞龙
33分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部