2007年10月29日 星期一

[Epigram] Basic Intro.

Epigram 基本使用

epigram是個詭異的editor-typechecker-interpreter
同時你對它可以做幾乎"不可逆"的edit動作
而每當你結束一個shed(下面會解釋何謂shed)的edit
epigram也會同時對那段的內容作typecheck
此外,你也可以藉由某個特定指令發揮這個"環境"的interpreter功能

在epigram裡面有三種常見的區塊:
第一種:
> -----------------------
> ...
> -----------------------
夾在兩條-----中間的叫做declaration
-----本身叫做rule .
這算是概念上的區塊,沒有什麼特殊之處
唯,如果想要開一個新的declaration
就要在rule上用滑鼠點兩下
第二種:
> [...]
[ ]這樣叫做shed.
shed內部就是epigram中唯一可以edit之處
當一段text是被包含在shed中時,這段text就可以被修改
而且,在結束這塊shed之前,這裡面的內容都不會被typecheck
結束shed的方法是:按鍵盤上的Esc按鍵
第三種:
> (...)
( )叫做一個group.
因為epigram中,line指的是一行的declaration
而不是指一般editor中的physical line
所以我們就用group來包裹某些跨行的東西
講半天,其實看一個例子馬上就會知道這是什麼了

一開始打開epigram,視窗會顯示:
> -----------------------------
> [ ]
> -----------------------------

我們把游標移到那個shed上
並且鍵入 data 然後按Esc結束這個shed
這時候,epigram會自動generate出一些code:
> -----------------------------
> ( [ ] !
> data !-------! where [ ]
> ! [ ]:[ ] )
> -----------------------------

這一段產生出來的code裡面又出現新的shed
沒錯,這就像是國小的歡樂填空格..
data是一個define data structure的keyword
當你Esc一開始的[data]這個shed時
epigram會知道說你要define某個data structure
所以它會把相對應的格式生產出來
使用者就把對應的空格填好就好
(當然,也是可以乖乖的全部照格式寫完再一次Esc掉整個shed)
(不過這樣你就會發現,epigram真是個有夠難搞的東西..)

事實上,epigram裡面只有三種這樣的declaration keyword
分別是:
data : declare data structure
let : declare fucntion
inspect : declare . . . question(?)
關於這三個的細節,以後有機會再說

先回到剛剛的code上面
這裡先不深究有關epigram這個language撰寫的方式
因為這裡只是初探,目的只是介紹這個environment

到上面的code為止,我們已經知道epigram怎麼輸入code
而,一旦Esc掉的shed,是不能再去edit的
那,如果我們打錯字怎辦??
epigram當然也提供了undo功能 (Alt + Backcpase)
可惜就是,epigram的undo目前還不夠完整
它只能讓你step by step的undo上去
也就是說,如果你發現很久以前的某個東西寫錯了
那你就必需要一路undo回去
然後改好以後,後面的東西都要重新撰寫
(其實,也可以把buffer先save起來,之後再paste回去)

以上,是epigram很悽慘不堪的edit environment
寫半天的東西,要麼儲存呢??又要怎麼讀取呢??
這真是個非常讓人頭大的問題
因為epigram既是一個editor又是一個interpreter
整個存成文字檔也不對
所以,epigram現在是利用xemacs的buffer tool來做這些事
save:
1.我有時候就乾脆直接用File>save *Epigram*這個功能
把整個檔案存成文字檔
2.另一個方法是,新開一個buffer
(就是另外開個空白的檔案,然後再用xemacs去open)
然後切換到那個新的buffer去
接著按 Ctrl+c 再接著按 Ctrl+e
這樣epigram的內容就會copy到新的buffer去
接著只要儲存這個file就好..
(好爛的辦法Orz)
load:
load的方法,就是用file>open指令去開之前存的檔案
(建議用opne in the new frame)
然後,把*Epigram*那個buffer裡的游標,停在你欲寫入的shed上
接著切到剛開的file/buffer視窗上
這時候有兩個選擇:
如果要整個file load過去
就按Ctrl+c + Ctrl+c
如果只要load其中一段,就把那一段選取起來
然後按Ctrl+c + Ctrl+r

沒有留言:

張貼留言