zoukankan      html  css  js  c++  java
  • MIT Scheme 的基本使用

    MIT Scheme 的基本使用

    注意:运行MIT-GNU Scheme出现“Requested allocation is too large”

    请求分配额度太大。尝试分配更小的堆内存。 
    右键单击应用程序的链接并选择属性。编辑目标,在其中添加自定义参数 --heap 512 即可 
    参考链接:stackoverflow

    快捷方式属性设置

    目标:  "C:Program Files (x86)MIT-GNU Schemeinmit-scheme.exe" --library "C:Program Files (x86)MIT-GNU Schemelib" --heap 512 --edit

    起始位置:  "C:Program Files (x86)MIT-GNU Scheme"

    安装和启动

    启动

    在 Windows 下正确安装 MIT Scheme 系统后,程序菜单里将有一个 MIT Scheme 目录,其中包含:

    1. Documentation:以浏览器方式打开 HTML 形式的 Scheme 文档
    2. MIT GNU Scheme:Edwin 环境下启动 Scheme。Edwin 是一个类似 emacs 的编辑器

    如果喜欢用命令行交互方式,可以用下述命令建一个快捷命令,放在你的桌面或者命令菜单里。注意将目录修改为你的系统安装目录:
    "C:Program FilesMIT-GNU Schemeinscheme.exe" --library "C:Program FilesMIT-GNU Schemelib"

    Edwin系统的退出

    C-x z (表示按 Ctrl-x 后按 z 键):从 Edwin 中退到 Scheme 的命令交互状态。此时 Edwin 挂起,可用 (edit) 唤醒挂起的 Edwin,回到挂起前的状态。

    C-x c :停止 Edwin 并回到 Scheme 的命令交互状态。

    C-x C-z:停止 Edwin 并挂起 Scheme 系统。再次启动 Scheme 将唤醒挂起的 Scheme 系统,回到挂起前的系统状态。

    C-x C-c:停止 Edwin 和 Scheme 系统。

    从交互循环进入 Edwin

    在交互方式下执行 (edit) 或 (edwin),将启动或返回 Edwin

    交互式执行中退出

    在提示符下键入下面表达式并回车:

    n ]=> (exit)

    系统将要求确认。这样退出后所有在 Scheme 里已经做的事情都将丢掉了。

    基本使用:

    命令行交互方式下回车,如果已输入了一个完整表达式,系统就会对其求值并输出结果

    在 Edwin 里 C-x C-e 求值光标左边的一个完整表达式,M-z 求值光标当时位于其中的整个定义式(一个定义式也就是一个表达式,其左括号从最左边开始)

    命令行交互方式下的基本使用

     

     

    命令行方式下的使用

     

    基本使用

    在交互式执行方式下,系统(启动后)将在一个窗口显示版本信息,最后是提示符:

    1 ]=>

    键入的程序代码将显示在提示符之后。

    此时系统执行 read-evaluation-print 循环(读入-求值-打印循环,REPL),可以键入符合 Scheme 语法要求的表达式(程序),要求系统对其求值。表达式中可以任意换行。一旦系统读到一个完整的表达式,就会对它求值(计算),并打印出求得的值。

    Scheme 不区分标识符中的大写和小写,define 和 DEFINE,Define 同样对待。

    启动后的提示符 1 ]=> 中的数字 1 表示当前系统运行在第一层“读入-求值-打印循环”。如果求值中出错,系统将进入更高层次的“读入-求值-打印循环”,也是系统的出错处理循环。在出错循环中仍然可以像在第一层循环一样使用 Scheme 系统,还可以做一些其他事情(参看 Scheme 文档)

    退出一层或多层读入-求值-打印循环

    可以用 Ctrl-u 组合键退出一层求值循环,用 Ctrl-g 退到第一层循环。

    中断执行:

    • 组合键 Ctrl-g:杀掉正在进行的求值并回到第一层 REPL
    • 组合键 Ctrl-x:杀掉正在进行的求值并回到当前 REPL
    • 组合键 Ctrl-u:杀掉正在进行的求值并回到上一层 REPL
    • 组合键 Ctrl-b:暂停当前求值进入断点 REPL。可以用 (continue) 唤醒中断的执行

     

     

     

     

    Edwin方式下的基本使用

     

     

    Edwin 的基本使用

    概述

    Edwin 是 MIT Scheme 系统的一个窗口式的编辑使用前端。其功能和使用方式都像著名编辑器 EMACS,使用方面的进一步细节可以参考EMACS。本页简单介绍 Edwin 的使用。

    启动 Edwin 实际上是先启动 Scheme 系统再启动一个 Edwin 前端。Edwin 是一个用 Scheme 写的交互式编辑器。其特点是支持 Scheme 表达式的编辑和求值。

    介绍 Edwin 的文档里常提到 buffer,这个概念类似于一般多窗口编辑器的编辑区。

    两种不同执行模式

    在 Edwin 执行时,一个编辑区(称为一个 buffer)可能处于两种不同的运行模式:

    Edwin 模式

    也就是编辑 Scheme 文件的模式。如果装入一个 .scm 文件,相应的 Edwin 的这个编辑区处于 Edwin 模式。在这种模式下可以编写 Scheme 程序,也可以对表达式求值。正常求出的值显示在最下面交互行,但不会显示出错信息,也不能进入调试系统

    特殊的 REPL 模式

    这时可以看到窗口下面状态条中显示 (REPL: lesten)。这时系统处于正常的 Scheme 交互模式,所有输出都显示在编辑器的窗口里,只不过是在 Edwin 里执行。在这种情况下可以看到所有系统输出(包括出错信息),也可以进入 debuger(是一个用 Scheme 写的交互式程序,它启动后打开另一个窗口)。
    任何时候都可以用 M-x repl 回到或打开一个 REPL buffer。

    启动 Edwin 后编辑器处于支持输入和求值 REPL 的模式。窗口下方黑条显示:

    --**-Ediwin: *Scheme*    (REPL: Listen) ----All----

    表示 Edwin 的模式,这时 Scheme 正在 REPL (Read-Evaluation-Print-Loop,读入-求值-打印循环) 中等待输入。上部大区域是交互窗口,可以在这里输入表达式并要求求值。

    建议大家在编辑模式下编写程序(函数的定义,所需基本数据的定义等),检查无误后(例如,函数能正常定义了)保存,然后在 REPL 模式里装入(用 Scheme 语言的 load,见使用简介)并做各种试验和调试(输入并求值各种具体计算表达式)。

    记号:

    C-x,C-c 等表示按住 Ctrl 键的同时按 x 或 c 键;

    M-p 等表示在按住 Meta 键的同时按 p键。在 PC 键盘上没有 Meta 键,可以直接用 Alt 键加上 p 键,或者先按 Esc 键再按 p 键。

    帮助信息

    在 Edwin 里按 Ctrl-h t,它会装入一个 tutorial 文件,其中讲述了各种常用命令。在 Windows 的 Scheme 程序菜单里的 Documentation 包含大量与 Scheme 有关的信息。

    网上可以找到许多相关信息。下面是一些有用链接:
    http://www.cnblogs.com/Henrya2/archive/2009/02/21/1395615.html
    http://blog.csdn.net/msnlogo/archive/2009/04/05/4050176.aspx
    http://www.blogjava.net/zhenyu/archive/2006/10/17/75657.html
    http://harry.javaeye.com/blog/446418

    退出系统

    C-x z (表示按 Ctrl-x 后按 z 键):从 Edwin 中退到 Scheme 的命令交互状态。此时 Edwin 挂起,可用 (edit) 唤醒挂起的Edwin,回到挂起前的状态。

    C-x c :停止 Edwin 并回到 Scheme 的命令交互状态。

    C-x C-z:停止 Edwin 并挂起 Scheme 系统。再次启动 Scheme 将唤醒挂起的 Scheme 系统,回到挂起前的系统状态。

    C-x C-c:停止 Edwin 和 Scheme 系统。

    求值 (exit) 退出 Scheme 系统。

    简单编辑和执行

    光标移动可以通过普通移光标键,或通过鼠标点击。用 Delete 或 Backspace 键删除字符。

    在正常输入过程中,每次输入右括号 "(",环境将自动闪烁对应的左括号 ")"。

    对于多行输入的表达式,换行后按 C-i,系统能将光标自动对齐到合适位置。对于各种复杂的 Scheme 表达式,例如 let, cond, 等等,Edwin 都定义了很好的对齐方式。

    求值表达式的方式:将编辑光标(反色小块)移到表达式后面,按键 C-x C-e 。

    被求值的表达式将由另一个线程求值,在求值过程中我们仍然可以做编辑工作。

    C-c C-x 或 C-c C-u,用于杀掉正在进行的求值。

    C-c C-b 中断当前求值,进入断点状态。

    翻页等命令:

    C-v:向下翻一屏   M-v:向上翻一屏
    C-a:移动到行首   C-e:移动到行尾

    两个常用操作

    在 REPL 模式下,所有输入的历史都有记录。这使我们可以很方便地再次使用曾经输入过的表达式。 M-p 反向枚举曾经输入的表达式,M-n 正向枚举这些表达式。

    这里列出了 Edwin 的常用命令(英文)

    how to use the Edwin
     
    1, if there is no META or EDIT key, Alt is that key.
     
    2, to end the session, C-x C-c.
     
    3, C-v, to the next screen
     
    4, C-g will quit what it was doing and allow you to enter it in again from scratch.
     
    5, C-k kill from the current cursor position to end of line
     
    6, whenever you kill something bigger than a character, Emacs saves it for you. to yank it back, use C-y.
     
    7, C-x C-e to evaluate the expression.
     
    8, you are now in the tutorial screem.
      Type: C-x b *scheme* to get into an evaluation buffer.
      Type: M(Alt)-p to access the history of *scheme*.
      Type: C-x b tutorial to go back to the tutorial screem.
     
    9, undo: C-x u, it undo the last command.
     
    10, File: C-x C-f filename  -->  enter into the "finding buffer" to find a file.
                                    if the file exits, it find the file, if not
                                    exits,create a file named filename.       
             C-x C-f C-g  --> cancel the "finding buffer" without doing anything.
             C-x C-s   -->  Save the file.
     
    11, buffer:  C-x C-b:  if you find a new file with C-x C-f in the             
                Edwin,the first file remains in the Edwin,Type C-x C-b
                to find them (it shows a list of all the buffers now in
                the Edwin). Any text you see in the Edwin, has to be
                in some buffer.   if you have edited a file or something
                and go to another file without saving the first one, the
                changes would not save, unless you reback to the first
                file, and C-x C-s. There is a way to save all the changed
                file, that is C-x s. the command goes through the list
                of buffers, and saves every changed buffer.
     
    12, C-x 1   remove the document from the screem.
     
    13, C-s     find a word or string, type C-s,and then, type in the word,
                once, you would find the
                word, again, you will find the next occurrece of the
                word you have typed in. type in C-g, you will go back to the
                first place where you press "C-s".
    14, C-x 1   display only one window.
     
    15, C-h ?   tell you what kinds of help you can get.
     
    16, C-h c + command: tell you the basic intro to the command.
                         to get more information, use C-h k + command.
                         to get info of a function, use C-h f + function

    这里列出了 EMACS 的一些常用命令(中文,在 Edwin 里都可用)

    程序

    C-x C-z 挂起程序

    C-c C-x 退出程序

    C-c k   关闭buffer

    C-l     重画屏幕

    C-g     结束命令,或者假死中恢复,也可以按3次ESC

     

    文件

    C-x C-s 保存

    C-x C-w 另存为

    C-x C-f 打开文件

    C-x C-r 只读方式打开

    C-x C-v 读入另外一个文件代替当前buffer的文件

    C-x s   保存所有

    C-x i   将文件的内容插入

    M-x revert-buffer    恢复到原始状态

     

    跳转

    前/后     单位

    C-f/b    字

    M-f/b    词

    C-a/e    行内

    M-a/e    句

    M-</>    文档

    C-p/n    行间

    M-{/}    段落

    C-x ]/[  页

    C-x C-x  文件内,mark之间

     

    M-g g  跳到指定行

    M-x goto-char 跳到指定字符

     

    编辑

    M-u       后面单词变为大写

    M-l       后面单词变为小写

    M-c       后面单词的首字母变大写

    M-/       补全

    C-j       从当前位置分成两行,相当于RET + tab

    M-(       插入()

    C-q tab   插入tab

    C-q C-m   插入^M

    M-;       插入注释

    C-o       回车

     

    删除

    M-d   后一词

    C-d   后一字

    M-del 前一词

    M-k   到句尾

    M-"   前面的所有空白

    M-z   删到指定字母处

    C-k   删除到行尾

     

    文本换位

    C-t        字符

    M-t        单词

    C-x C-t    行

    M-x transpose-* 其他命令

     

    撤销

    C-/

    C-x u

    C-_

    C-z

     

    重做

    C-g M-x undo

    C-g C-/

    C-g C-z

    C-g C-_

     

    粘贴

    C-y

    C-v

     

    tab/空格转换

    M-x tabify

    M-x untabify

     

    让选择的区块自动对齐

    M-x indent-region

     

    其他命令

    C-u <数字> <命令> 重复命令n次

    M-<数字>   <命令> 同上

    M-!     运行shell命令

    C-u M-! 执行一条外部命令,并输出到光标位置

    M-x cd  改变工作目录

    M-x pwd 当前工作目录

     

    C-" 启动输入法

    M-` 菜单

    F10 菜单

    M-x eval-buffer 在.emacs的buffer中运行,重新加载emacs配置

     

    查找替换

    ----------------------------------------------------------------------

    C-r 向上查找

    C-s 向下查找

    C-s C-w 向下查找,光标位置的单词作为查找字符串

    C-s C-y 向下查找,光标位置到行尾作为查找字符串

    C-s RET <查找字符串> RET   非递增查找

    C-s RET C-w              不受换行、空格、标点影响

    C-M-s                    正则式向下查找

    用向上查找命令就将上面命令的s替换为r

     

    M-%   替换

    C-M-% 正则式替换

     y 替换当前的字符串并移动到下一个字符串

     n 不替换当前字符串,直接移动到下一个字符串

     ! 进行全局替换,并要求不再显示

     . 替换当前字符串,然后退出查找替换操作

     q 退出查找替换操作,光标定位到操作开始时的位置

     

    其他命令

    M-x replace-*

    M-x search-*

     

    窗口

    C-x 0 关掉当前窗口

    C-x 1 关掉其他窗口

    C-x o 切换窗口

    C-x 2 水平两分窗口

    C-x 3 垂直两分窗口

    C-x 5 2 新frame

     

    buffer

    C-x C-b        查看

    C-x b          切换

    C-x C-q        设为只读

    C-x k          删除

    C-x left/right 切换

     

    翻页

    C-v 下一页

    M-v 上一页

     

    选择

    M-h     选择段落

    C-x h   全部选择

     

    普通区块

    C-SPC   M-x set-mark-command 单个位置set mark

    C-@     同上

    M-@     对word进行set Mark

    M-w     先set Mark,移到光标,M-w就可以复制

    C-w     剪切

     

    矩形区块

    用这些快捷键要先关闭cua-mode

    C-x r t      用串填充矩形区域

    C-x r o      插入空白的矩形区域

    C-x r y      插入之前删除的矩形区域, 粘贴时,矩形左上角对齐光标

    C-x r k      删除矩形区域

    C-x r c      将当前矩形区域清空

     

    寄存器

    ----------------------------------------------------------------------

    光标位置和窗口状态

    C-x r SPC <寄存器名>                   存贮光标位置

    C-x r w <寄存器名>                     保存当前窗口状态

    C-x r f <寄存器名>                     保存所有窗口状态

    C-x r j <寄存器名>                     光标跳转

     

    文本和数字

    C-x r s <寄存器名>                     将连续区块拷贝到寄存器中

    C-x r r <寄存器名>                     将矩形区块拷贝到寄存器中

    C-u <数字> C-x r n <寄存器名>           将数字拷贝到寄存器中

    C-x r i <寄存器名>                     在缓冲区中插入寄存器内容

    M-x view-register                     查看寄存器内容

    M-x list-registers                    查看寄存器列表

     

    宏模式

    C-x (                    开始一个宏的定义

    C-x )                    结束一个宏的定义

    C-x e                    执行宏

    M-x name-last-kbd-macro  给最后一个宏命名

    M-x insert-kbd-macro     在当前文件中插入一个已定义并命名过的宏

     

    书签

    C-x r m <name>           设置书签

    C-x r b <name>           跳转到书签

    C-x r l                  书签列表

    M-x bookmark-delete      删除书签

    M-x bookmark-load        读取存储书签文件

    M-x bookmark-save        保存到文件

     

    目录模式

    ----------------------------------------------------------------------

    C-x d     M-x dired     启动目录模式

    C-x C-d   简单目录

    h         帮助

    ?         简单帮助

    请参考http://www.emacs.cn/Doc/Dired

     

    帮助

    C-h k    显示你将按下的键执行的function.

    C-h f    列出function的功能说明。

    C-h b    列出目前所有的快捷键。

    C-h m   列出目前的mode的特殊说明.

    C-c C-h 列出以C-c 开头的所有快捷键.

    调试

    如果正在进行的求值出错,系统将给出一些错误信息,并询问是否启动调试器(debuger)。回答 y 要求系统启动调试器,显示出一个新的调试器窗口;回答 n 回到原求值循环。

    (这部分内容将进一步建设)

    编辑技术

    其他

    Edwin 前端是一个功能强大的编辑器,允许用 Scheme 对其功能进行任意的扩充。这方面情况与 EMACS 类似,只是这里用的扩充语言是 MIT Scheme(EMACS 用的是 EMACS Lisp)。请参考 MIT Scheme 文档和 EMACS 文档。

     

     

     

     

     

     

    MIT-GNU-Scheme 文档

    Scheme 文件操作

    编辑和装入程序文件:

    如果程序比较长,可以用系统外的编辑器编写好程序源文件,而后用 load 函数装入系统。下面是一个用绝对路径的实例:

    1 ]=> (load "e:\temp\test1.scm")

    求值这个表达式,可以看到文件装入的信息。load 函数还可以装入编译好的程序文件,详情见 Scheme 文档 “MIT Scheme User's Manual” 的 “3.2 Loading Files”。

    用函数 cd 可以转换当前工作目录。下面是一个实例:

    1 ]=> (cd "e:\temp")

    此后就可以直接用文件名装入这个目录下的文件了。

    保存和恢复系统映像:

    可以将 Scheme 系统的当前运行现场保存起来,以便将来回复这个现场。这样保存的现场称为一个“world image”或者一个“band”。实际上,Scheme 启动时也就是装入了一个默认的 band,装入编译器的启动方式就是装入另一个 band。

    函数 save-disk 将当前现场存入文件。下例将现场存入当前目录下的文件 image1:

    1 ]=> (disk-save "image1")

    函数 disk-restore 恢复原保存在一个文件里的现场:

    1 ]=> (disk-restore "image1")

    阅读 MIT Scheme 文档:

    “MIT Scheme Reference” 介绍 MIT Scheme 的详细功能,“MIT Scheme User's Manual” 介绍 MIT Scheme 的使用。“SOS Reference Manual” 介绍的 SOS 是 Scheme 的一个对象系统,“IMAIL User's Manual” 介绍的 IMAIL 是用 Scheme 做的一个邮件阅读器。下面简单介绍与前两个文档有关的若干问题。

    MIT Scheme 手册的主要内容是介绍这个 Scheme 系统提供的功能,包括预定义的变量(variable)、特殊形式(special form)和过程(procedure,函数)。例如

    • 过程的实例:
      procedure: eqv? obj1 obj2 
      过程名是 eqv?,取两个参数。使用的例子: (eqv? 3 2)

    procedure: list object ... 
    过程名是 list,取 0 个或任意多个参数。用例: (list 1 2 3 4)

    • 特殊形式的实例:
      special form: lambda formals expression expression ... 
      特殊形式,名字是 lambda,后面应有一个参数表和一个或多个表达式。
      用例: (lambda (x y) (+ x y))

    我想有件事情肯定是对的,就是买了Structure and Interpretation of Computer Programs这本书籍。这本书在网上的评价甚高,被称为巫师书。
    书中介绍说是本科低年级的教材。而我本人,02年西安交大毕业,工作近七年,而且毫不谦虚地说,本人对计算机程序的执行的理解有深刻的认识,在国内,和同龄的程序员,更甚者比高龄的程序员,我丝毫不弱,但是,当我读这本书的时候,我明显的觉得,国内教育与国外教育的巨大差别,因为,书中很多思想都是我未曾见识过的,想象我已经工作七年了,而这本书只是MIT的本科低年级学生的教材。

    当我在网上搜索的时候,我发现,不光是MIT,包括UCB,Standford等著名大学都在讲授这门课程,而且我还幸运的发现,UCB有这门课的网络视屏,正好可以跟着学习。

    现在言归正传,这教材是MIT press出版的,我就依此为线索,我想知道MIT这样的名校,他们的计算机系都开些什么课程,参考了一些关于中国人对国外教育的研究论文,而且也发现了下面的链接:
    http://www.core.org.cn/OcwWeb/Global/all-courses.htm#ElectricalEngineeringandComputerScience

    MIT的CS科系称之为:EECS,也就是电子工程和计算机科学系,有趣的时候,他们设置的第一门课程就是:计算机的程序构造与解释。所以,我越发觉得这么课程的重要性。课程代号为6.001.

    我想借此机会,分析一下MIT的课程设置,当然,特别是与计算机相关的课程。
    EECS大概涵盖如下几个专业知识:电气工程,生物工程,自动控制,人工智能,通信系统,电子的各领域等。
    与计算机相关的课程有:
    6.001: 计算机程序的构造与解释
    6.033: 计算机系统工程,指定的教材竟然是人月神话,当然还有一系列的paper需要阅读。
    6.035:计算机语言工程:是有关计算机系统和体系结构的一门课程,可能主要涉及编译原理。通过可选教材看出这一点
    6.046J: 算法导论
    6.090:6.001的实践课程,获取编程经验。
    6.823:计算机系统和体系结构:计算机体系结构:定量的方法,计算机组织与设计:硬件与软件接口。
    6.824:分布式计算机系统
    6.826:计算机系统原理
    6.828:操作系统工程:莱昂氏Unix操作系统注释
    6.829:计算机网络

    还有很多交叉的课程。至少我认为上述的:
    001,033,035,046,823,826,828这七门课程是需要好好学习的,至少是要了解个大概的。
    先不说别人的课程还有大量的实践作业,就是在内容上的差距,我们相比起来也是差的太远了。
    难怪他们能培养出来大师级人物。我们的教育,还有很长的路要走。

    来源: <http://blog.csdn.net/stephanxu/article/details/3858918>

    ===================== End

  • 相关阅读:
    Linux基础命令---swapon
    Linux基础命令---fsck
    Linux基础命令---e2fsck
    Combination Sum
    Pow(x, n)
    Permutations
    Permutation Sequence
    Rotate List
    Unique Paths II
    Unique Paths
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10153751.html
Copyright © 2011-2022 走看看