• 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

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/10153751.html
Copyright © 2020-2023  润新知