Skip to content

Instantly share code, notes, and snippets.

@tiye
Created June 3, 2012 05:10
Show Gist options
  • Select an option

  • Save tiye/2862005 to your computer and use it in GitHub Desktop.

Select an option

Save tiye/2862005 to your computer and use it in GitHub Desktop.
forth 笔记

看到微博上推荐 forth 语言, 忍不住看了, 教程有一份:
http://galileo.phys.virginia.edu/classes/551.jvn.fall01/primer.htm
另外一份没看过: http://www.forth.com/starting-forth/index.html
看了遍, 独特, 但我不喜欢, 这里留下点记录以备可能的需要.

安装

Ubuntu 源里边有能找到两个版本, 区别不详:

$ aptitude search forth
$ aptitude install gforth
$ gforth

启动的大概是解释器, 还不区分大小写. 输入 bye 或按 ctrl-c 退出.

基本

forth 是基于栈的语言, 输入代码以后, 按下回车开始执行.
然后表达式是后置的, + - * / 这几个表达式有内置.
. 用来把栈顶元素移到屏幕显示. 回车可以在 . 之后按下:

1 . 1 ok
1 2 + . 3 ok
3 4 5 + * . 27  ok

用冒号和分号的组合来定义变量和操作, 然后回车执行,
注意 ." 这里是连在一起, 后边有空格, 然后内容到 " 再截止:

: hi ." string" ;

然后定义一个操作, 比如 *+ , 然后执行效果相当于替换了:

: *+ * + ;
3 4 5 *+ .
3 4 5 * + .

因为是栈, 就有了很多可以操作栈的内容的操作, 像 drop swap 各种,
比如我用 <cr> 表示回车, 打印出栈的内容比如:

1 2 3 4 swap . . . . <cr> 3 4 2 1  ok
1 2 3 dup . . . . <cr> 3 3 2 1  ok
1 2 3 drop . . . <cr> 2 1
1 2 3 4  1 pick . . . . . <cr> 3 4 3 2 1  ok
1 2 3 4  0 pick . . . . . <cr> 4 4 3 2 1  ok
1 2 3 4  1 pick . . . . . <cr> 3 4 3 2 1  ok
1 2 3 4  2 pick . . . . . <cr> 2 4 3 2 1  ok

然后用来写成函数, 比如下面计算平方和, swap 换了 0,1,2 的位置:

: sum-squares dup * swap dup * + ;
3 4 sum-squares .

end

很独特的语言, 不过中文文档少, 需要的话看上边两篇教程...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment