scheme 教程 #lang racket】的更多相关文章

scheme 教程 #lang racket 来源  https://blog.csdn.net/yemeishenme/article/details/51471037 原文: https://learnxinyminutes.com/docs/zh-cn/racket-cn/ #lang racket ; 声明我们使用的语言 ;;; 注释 ;; 单行注释以分号开始 #| 块注释 可以横跨很多行而且... #| 可以嵌套 |# |# ;; S表达式注释忽略剩下的表达式 ;; 在调试的时候会非常…
最近在阅读sicp这本书,书中的代码是使用scheme实现的.之前阅读的时候是使用Dr.Racket来完成写练习的,可我觉得与其这样,不如一步到位,使用emacs+lisp解释器来的比较快. 安装emacs 直接点击官方教程点我查看,上面讲解的十分清楚,基本上不同系统的安装方式大同小异,下载后点击运行,还是很简单的吧. 安装lisp解释器 lisp有无数种实现的版本,这里我使用的是Racket,因为我之前电脑上就有Dr.Racket所以不用下载,如果你没有的话,可以点击Racket下载地址,选择…
这题目确实比较杀脑细胞... 原题: (let* ((yin ((lambda (cc) (display "@") cc) (call-with-current-continuation (lambda (c) c)))) (yang ((lambda (cc) (display "*") cc) (call-with-current-continuation (lambda (c) c))))) (yin yang)) 它会输出“@*@**@***@****@*…
Continuation Pass Style在函数式编程(FP)中有一种被称为Continuation Passing Style(CPS)的风格.在这种风格的背后所蕴含的思想就是将处理中可变的一部分抽象为一个function,并将其作为一个参数传入.这是高度抽象的方法,所带来的表达的威力也是无与伦比的.下面举一个例子,实现CPS描述的fold函数.在此之前需要简单介绍一下fold概念,在FP中这是一个非常有效的处理list的工具.一般它的signature是fold(f,initial,li…
scheme里的宏不同的实现有不同的写法: 1.mzscheme的define-macro (mzscheme也就是pltschme,也就是drracket,没有define-macro这个关键字) 语法:(define-macro   macro-name (lambda  macro-args) macro-body   ......) 例如:定义when (define-macro   when (lambda    (test .   branch) `(if    ,test (beg…
一直想学学LISP,今天总算开了个头.如今学习LISP不是为了立就可以以用于实际项目的应用,而是为了学习一下函数式的思维方式,可以更加深入的了解计算的本质,可以更好的用C++, Java, Python等编敲代码.更何况,这些主流语言都逐渐添加了函数式编程的特征,C++,Java如今都引入了 Lambda 表达式.假设可以系统学习一下LISP,相信对自己以后掌握这些语言的新特新特征,对自己写JavaScript.Python,对自己了解闭包.高阶函数.Lambda表达式都会有非常大帮助.言归正传…
默认的Racket是要对函数参数进行求值的, 例如(f 1 (+ 1 2))里面,(+ 1 2)要先求值为3,变为(f 1 3)再进行下一步操作.因此, Racket若按照SICP使用define关键字来定义延时计算的关键函数delay和cons-stream是不可行的, 需要用宏来定义,绕过求值. #lang racket (define (memo-proc proc) (let ((already-run? #f) (result #f)) (lambda () (if already-r…
99种用Racket说I love you的方式 来源 https://www.tuicool.com/articles/qiyeAz 原文  http://www.soimort.org/posts/145/ 今天是3月14日,也就是传说中的 白色情人节 (据说是个被表白一方向表白方回赠礼物以表示心意的好日子,蕴含着人们对天下有情人终成眷属的 良好祝愿 ). 作为一个技术宅,应该在这一天准备什么样的礼物给妹子捏?99朵玫瑰?还是巧克力?可不要被这些 商家营销手段 给骗了——就像Sheldon家…
Drracket continuation 文中使用let/cc代替call/cc Racket文档中,let/cc说明为: (let/cc k body ...+) Equivalent to (call/cc (lambda (k) body ...)). 首先,通过一个简单的函数来测试下continuation,注意,下面的函数执行会导致无限循环 #lang racket (define r #f) (define (f) (let/cc k ;开始捕获continuation,从let/…
#lang racket (define (length items) (if (null? items) (+ (length (cdr items))))) (define (element-of-set? x set) (cond ((null? set) false) ((equal? x (car set)) true) (else (element-of-set? x (cdr set))))) (define (make-leaf symbol weight) (list 'lea…