1欢迎使用Racket

Racket是

  • 一种编程语言-一种lisp方言继承自Scheme
  • 一系列的编程语言家族-各种Racket变体
  • 一个工具集-为了使用一个系列的编程语言家族
    Racket主要的工具包括
  • racket,核心编译器,解释器,运行系统
  • DrRecket 编程环境
  • raco 命令行工具,可以用来执行Racket命令,比如安装包,构建库等等。
    一般情况下,你可以使用DrRacket探索Racket语言,特别是刚开始的时候。你也可以使用命令行racket解释器和你最喜欢的文本编辑器。
    如果你使用DrRacket,你需要选择合适的语言,因为DrRacket包含了各种Racket语言的变体,和其它语言。如果你从来没有使用过DrRacket,启动它,然后输入
    #lang racket
    到最上方的文本区域,然后点击上方的运行按钮。DrRacket就会运行在正常的Racket变体上。(你也可以运行在racket/base或者其它的语言上)
    如果你已经使用过DrRacket运行以#lang开头的程序,DrRacket会记住你最后使用的语言,而不是通过#lang来推理。在这种情况下,使用语言选择菜单来告诉DrRacket使用#lang申明的语言类型。它仍然会吧#lang放在文本的第一行。

1.1和Racket交互

DrRacket底部的文本区域和racket命令行程序都像是一个计算器。输入一个racket表达式,敲入回车键,结果就会被打印出来。这种交互被叫做读取求值打印循环简称REPL。
数字是一个表达式,它求值的结果就是一个数字。
>5
5
字符串也是一个表达式并被求值成它自己。一个字符串以双引号开始和结束。
Racket使用括号来表示大型的表达式,几乎任何表达式或者简单的常量。比如,函数调用写成(函数名 参数···)。

1.2 定义和交互

你能使用define定义自己的函数。尽管你能在REPL里执行define,定义经常被保留并在之后使用。所以,在DrRacket里,你一般吧定义放在顶部区域-叫做定义区-并使用#lang作为前缀。
#lang racket
(define (extract str)
(substring str 4 7))
如果调用(extract "the boy")是主程序的一部分,那么应该放置在定义区。但是如果它只是一个例子表达式,用来探索exttact的用法,那么你他它留在定义区,点击运行,然后在repl里执行(extract "the boy")。
当使用命令行程序而不是在DrRacket里面运行,你可以使用你最喜欢的编辑器来保存上面的代码。如果你保存成"extract.rkt",然后在同一目录运行racket,你可以像下面这样执行
>(enter! "extract.rkt")
>(extract "the gal out of the city")
"gal"
enter!形式加载文件的代码并切换执行环境到模块内部,和DrRacket的运行按钮执行相同的操作。

1.3创建可执行文件

如果你的文件或者DrRacket的定义区域包含下列代码
#lang racket
(define (extract str)
(substring str 4 7))
(extract "the cat out of the bag")
它是一段完整的程序当执行时打印出“cat”,在DrRacket里面或者使用enter!形式在命令行里。但是如果程序被保存在<src-filename>的文件里,你可以在命令行里使用命令运行
racket <src-filename>
为了打包程序变成一个执行文件,你可以使用以下方法

  • 在DrRacket里,你可以选择Racket|Create Executable菜单。
  • 在命令行里,运行raco exe <src-filename>。查看raco exe: Creating Stand-Alone Executables 可以看到更多信息。
  • 在unix或者mac os x里,你可以把程序文件转变成一个可执行的脚本只要插入
    #! /user/bin/env racket
    在文件开头的地方。当然,使用chmod +x <filename>改变文件的执行权限。
    这种情况需要racket在用户的执行搜索路径上。你也可以指定一个全路径指向racket在#!之后,在这种情况下用户的执行搜索路径就没关系了。

1.4Lisp/Scheme的备注

如果你已经知道了Scheme或者Lisp,你可以把下面代码
(define (extract str)
(substring str 4 7))
放在"extract.rktl"里面并使用下面命令运行
>(load "extract.rktl")
>(extract "the dog out")
"dog"
这样也可以运行,因为racket会模仿传统的lisp环境,但是我们强烈建议不要使用load或者在一个模块外层运行代码。
定义运行在模块外部会产生很多问题。比如不好的错误信息,性能不好,不能很好整合。模块系统设计可以很好的避免问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容