Jimmy's papa發現在javascript裡,每個漢字unicode竟然佔字串長度8個字元,有興趣的網友可用alert("一二三到台灣".length)測測,看看回傳值真是驚人啊!!!理論上象形方塊字能夠承載更多意義,但是在電腦的世界使用漢字unicode卻沒有佔到多少便宜
所以,同功能的程式碼若以英文命名,可能只需8個字元,就足夠讓程式設計師分辨理解程式碼的意義,但是若以白話中文命名,以Jimmy's papa的經驗,每個程式碼命名至少需要2~5個中文字,也就是16~40個字元,才能寫出比較通順的中文程式碼......
(待續.....)
這裡是Jimmy的實驗室用來發表Jimmy的Scratch程式作品,還有LEGO WEDO & NXT機器人設計 & Android, (本部落格引用圖文為教育教學目的合理使用) 想與我(Jimmy的爸爸 )聯絡 jimmyscratchlab@gmail.com
2013年3月19日 星期二
2013年3月14日 星期四
[Forth.js]如何使用JSON
c" {}" >json value 棒球隊
棒球隊 json> . 跳行
棒球隊 c" 綠巨人" json! 隊名
棒球隊 0 c" 詰生" json! 名字
棒球隊 0 c" 男" json! 性別
棒球隊 0 c" 伸卡球" json! 球種
棒球隊 0 c" 200公分" json! 身高
棒球隊 0 c" 39" json! 年紀
棒球隊 1 c" 浩客" json! 名字
棒球隊 1 c" 男" json! 性別
棒球隊 1 c" 曲球" json! 球種
棒球隊 1 c" 500公分" json! 身高
棒球隊 1 c" 25" json! 年紀
棒球隊 json> . 跳行
棒球隊 0 json@ 名字 . 跳行
棒球隊 1 json@ 名字 . 跳行
可將以上的符式程式碼貼到forthjs.appspot.com測測看,執行結果如下
![]() |
2013年3月12日 星期二
[Forth.js]透過AJAX取得中文筆劃資料
Forth.js現在也可透過AJAX取得JSON資料,所以藉由善心網友提供測試的Chinese Character Web API(http://ccdb.hemiola.com/),Forth.js也可取得中文筆劃資料
可將以上的符式程式碼貼到forthjs.appspot.com測測看,執行結果如下
c" http://ccdb.hemiola.com/characters/string/" value url
c" ?fields=kTotalStrokes" value urlp
create 姓氏表 c" 陳" , c" 王" , c" 劉" , c" 周" , c" 何" ,
: 姓氏表轉字串
c" "
5 for
5 r@ - 姓氏表 + @ strconcat
next
;
: 雲端取資料 ajax ;
: 變json物件 { 資料區域變數 }
資料區域變數 >json
;
url 姓氏表轉字串 strconcat urlp strconcat false tick 變json物件 雲端取資料
姓氏表 0 + @ . dup 0 json@ kTotalStrokes . .( 劃) 跳行
姓氏表 1 + @ . dup 1 json@ kTotalStrokes . .( 劃) 跳行
姓氏表 2 + @ . dup 2 json@ kTotalStrokes . .( 劃) 跳行
姓氏表 3 + @ . dup 3 json@ kTotalStrokes . .( 劃) 跳行
姓氏表 4 + @ . dup 4 json@ kTotalStrokes . .( 劃) 跳行
可將以上的符式程式碼貼到forthjs.appspot.com測測看,執行結果如下
![]() |
2013年2月21日 星期四
詩經是甲骨金文程式碼?!孔子是編程祖師爺?!
Jimmy's papa最近一直注意某個宗教國學網,它提到古代經文書寫在竹簡上,如同現代程式設計師使用程式碼編輯器一般,可以很便利的執行Insert/Replace/Paste等編輯動作
甚至詩經裡某些看似單純描寫景物的詩句,經過象形化為甲骨金文,其實是變數宣告或引用(include)其他竹簡的段落的關鍵字(keyword)
初看這些論點會覺得超級話唬爛,小時候看一些國學大師在話玄學的書中,常常提到河圖洛書八卦是古代先秦文化裡多了不起的科技成就,但除了拿來算命外我卻看不到有何實際應用
不過,自從Jimmy's papa學過符式(Forth)程式語言一段時間後,深信只要有張桌面大的紙,邊邊畫上兩個堆疊陣列(大小應該不會超過20格),其餘的空白處規劃為字典表格,符式程式高手不需借助電腦便能人工紙筆演算起程式
所以,詩經是甲骨金文程式碼,我覺得不無可能,那麼,將周朝的三千多首詩,刪除整理為碼書詩三百還附上Package name,帶領儒團周遊列國的孔夫子是編程祖師爺,我也不覺得訝異
現在,Jimmy's papa每看到易經的六爻的變化順序,就越看越像符式的堆疊(Stack),呵呵!!!
甚至詩經裡某些看似單純描寫景物的詩句,經過象形化為甲骨金文,其實是變數宣告或引用(include)其他竹簡的段落的關鍵字(keyword)
初看這些論點會覺得超級話唬爛,小時候看一些國學大師在話玄學的書中,常常提到河圖洛書八卦是古代先秦文化裡多了不起的科技成就,但除了拿來算命外我卻看不到有何實際應用
不過,自從Jimmy's papa學過符式(Forth)程式語言一段時間後,深信只要有張桌面大的紙,邊邊畫上兩個堆疊陣列(大小應該不會超過20格),其餘的空白處規劃為字典表格,符式程式高手不需借助電腦便能人工紙筆演算起程式
所以,詩經是甲骨金文程式碼,我覺得不無可能,那麼,將周朝的三千多首詩,刪除整理為碼書詩三百還附上Package name,帶領儒團周遊列國的孔夫子是編程祖師爺,我也不覺得訝異
現在,Jimmy's papa每看到易經的六爻的變化順序,就越看越像符式的堆疊(Stack),呵呵!!!
2013年2月6日 星期三
[Forth.js]浮泡排序中文程式碼
Bubble-sort是學資料結構或演算法時,授課老師常會給的家庭作業之一,拿來練習寫符式中文程式碼
這是Jimmy's papa參考的Javascript程式碼
可將底下的符式程式碼貼到forthjs.appspot.com測測看
![]() |
| 寄件者 圖片 |
![]() |
| 寄件者 圖片 |
function bubbleSort(arr){
var i=arr.length, j;
var exchangVal;
while(i>0){
for(j=0;j<i-1;j++){
if(arr[j]>arr[j+1]){
exchangVal = arr[j];
arr[j]=arr[j+1];
arr[j+1]=exchangVal;
}
}
i--;
}
return arr;
}
可將底下的符式程式碼貼到forthjs.appspot.com測測看
封 貢冊 993 , 566 , 885 , 333 , 788 , 111 ,
造詞 示列 { 陣列 陣列長 }
陣列長 0
週而
陣列 i 加 汲 .
復始
矣
造詞 浮泡排序 { 陣列 陣列長 }
籌 目前位置 陣列長 給 目前位置
起
目前位置
若然
目前位置 0
週而
陣列 i 加 汲 陣列 i 加一 加 汲 雙複 大於
若真
換 陣列 i 加一 加 滯 陣列 i 加 滯
然後
復始
目前位置 減一 給 目前位置
陣列 陣列長 示列
跳行
重蹈
矣
.( 原順序--> ) 貢冊 6 示列 跳行 跳行 .( 排序... ) 跳行
貢冊 6 浮泡排序
2013年1月25日 星期五
[Forth.js]語境與虛詞--以詩經為範例
以下的符式詞(Forth words),可用來切換語境(context)
context ( <name> -- ) 語境
definitions ( -- ) 依境定義
also ( -- ) 目前的語境加入搜尋順序清單
onlyforth ( -- ) 回復最初的搜尋順序清單
defer ( <name> -- ) 虛詞
is ( xt <name> -- ) 是
Jimmy's papa最近對詩經及古文蠻有興趣地,所以在網路上找了兩種不同的詮釋,測測看虛詞在切換不同的語境下,是否會有不同的結果
可將程式碼貼到Forth.js線上試玩版執行看看 forthjs.appspot.com
執行的結果應該如下
context ( <name> -- ) 語境
definitions ( -- ) 依境定義
also ( -- ) 目前的語境加入搜尋順序清單
onlyforth ( -- ) 回復最初的搜尋順序清單
defer ( <name> -- ) 虛詞
is ( xt <name> -- ) 是
Jimmy's papa最近對詩經及古文蠻有興趣地,所以在網路上找了兩種不同的詮釋,測測看虛詞在切換不同的語境下,是否會有不同的結果
show_code defer 上帝板板 defer 下民卒癉 : 《詩經·大雅·生民之什·板》 上帝板板 下民卒癉 cr ; context 甲骨索隱 definitions also : 解_上帝板板 ." 上帝為消滅罪孽將正本清源" ; : 解_下民卒癉 ." 乃因地上瞑盲奴隸被包裹起來見不著陽光" ; : 轉甲骨索隱語境 context 甲骨索隱 [tick] 解_上帝板板 is 上帝板板 [tick] 解_下民卒癉 is 下民卒癉 context Forth ; context 朱熹詩集傳 definitions : 解_上帝板板 ." 天反其常道" ; : 解_下民卒癉 ." 而使民盡病矣" ; : 轉朱熹詩集傳語境 context 朱熹詩集傳 [tick] 解_上帝板板 is 上帝板板 [tick] 解_下民卒癉 is 下民卒癉 context forth ; .( [朱熹詩集傳語境] 上帝板板 下民卒癉--) 轉朱熹詩集傳語境 《詩經·大雅·生民之什·板》 .( [甲骨索隱語境] 上帝板板 下民卒癉--) 轉甲骨索隱語境 《詩經·大雅·生民之什·板》
可將程式碼貼到Forth.js線上試玩版執行看看 forthjs.appspot.com
執行的結果應該如下
[朱熹詩集傳語境] 上帝板板 下民卒癉-- 天反其常道 而使民盡病矣
[甲骨索隱語境] 上帝板板 下民卒癉-- 上帝為消滅罪孽將正本清源 乃因地上瞑盲奴隸被包裹起來見不著陽光
2013年1月16日 星期三
[Forth.js]電話號碼解密遊戲
平常與Jimmy小子打完藍球,在回家的路上,Jimmy總會嘰哩呱啦講個不停,不是唱歌就是講同學告訴他的笑話,不然就是要我猜謎語,
有天說著說著忽然問起家裡的電話號碼,由於剛好走在小巷弄裡而且這小子講話音量也不低,靈機一動我就隨口回他
『耳朵 帆船 大肚 眼鏡 柺杖 鴨子 鉛筆』
他問我『什麼意思』
『幼稚園有教過』我說
他說『我不記得了』
『鉛筆1 鴨子2 耳朵3 帆船4 鉤鉤5 大肚6 柺杖7 眼鏡8 汽球9 球球 0』我說
他說『我不懂』
『這是密碼,你自己解碼』我說
小傢伙這時終於安靜一些,直到回家前都摸著小腦袋解碼
到家門口時,他說『爸,你說錯了,家裡的電話號碼不是那樣』
『嘿嘿....,我故意的』
回家後想想,這似乎可拿來做符式(Forth)程式練習
以下是幼稚園流行的手指謠,有興趣的人也可用來加密
『耳朵 帆船 大肚 眼鏡 柺杖 鴨子 鉛筆』
他問我『什麼意思』
『幼稚園有教過』我說
他說『我不記得了』
『鉛筆1 鴨子2 耳朵3 帆船4 鉤鉤5 大肚6 柺杖7 眼鏡8 汽球9 球球 0』我說
他說『我不懂』
『這是密碼,你自己解碼』我說
小傢伙這時終於安靜一些,直到回家前都摸著小腦袋解碼
到家門口時,他說『爸,你說錯了,家裡的電話號碼不是那樣』
『嘿嘿....,我故意的』
回家後想想,這似乎可拿來做符式(Forth)程式練習
\ 電話號碼解密符式碼
alias ." 印" end_alias
: 鉛筆 印" 1" ;
: 鴨子 印" 2" ;
: 耳朵 印" 3" ;
: 帆船 印" 4" ;
: 鉤鉤 印" 5" ;
: 大肚 印" 6" ;
: 柺杖 印" 7" ;
: 眼鏡 印" 8" ;
: 汽球 印" 9" ;
: 球球 印" 0" ;
耳朵 帆船 大肚 眼鏡 柺杖 鴨子 鉛筆
可將程式碼貼到Forth.js線上試玩版執行看看
forthjs.appspot.com
以下是幼稚園流行的手指謠,有興趣的人也可用來加密
一根手指頭 , 一根手指頭 , 變丫變丫變成毛毛蟲
二根手指頭 , 二根手指頭 , 變丫變丫變成小白兔
三根手指頭 , 三根手指頭 , 變丫變丫變成小花貓
四根手指頭 , 四根手指頭 , 變丫變丫變成螃蟹走
五根手指頭 , 五根手指頭 , 變丫變丫變成拍拍手
六根手指頭 , 六根手指頭 , 變丫變丫變成打電話
七根手指頭 , 七根手指頭 , 變丫變丫變成神槍手
八根手指頭 , 八根手指頭 , 變丫變丫變成蜘蛛手
九根手指頭 , 九根手指頭 , 變丫變丫變成熱汽球
十根手指頭 , 十根手指頭 , 變丫變丫變成黃飛鴻
2013年1月9日 星期三
[Forth.js] 小學生中文程式教育網站
之前開發的JForthBlocks在平版上用起來不太順手
所以另外做一套簡單的工具,套用虛擬鍵盤的概念,將用到的符式詞(Forth words)都擺到鍵盤上,
方便平板的使用者(Jimmy)認識中文符式
目前還是非常陽春版,短期目標可能試寫一個塔防遊戲的簡單架構,然後讓Jimmy可以一個人修修改改, 這樣一來這個寒假就有事情讓他做啦!!就不會整天喊無聊哩!!! http://forthjs.appspot.com/
目前還是非常陽春版,短期目標可能試寫一個塔防遊戲的簡單架構,然後讓Jimmy可以一個人修修改改, 這樣一來這個寒假就有事情讓他做啦!!就不會整天喊無聊哩!!! http://forthjs.appspot.com/
![]() |
| 寄件者 圖片 |
2012年10月27日 星期六
將Forth當做Web Script?
底下兩段程式碼,可看到已經有人把Ruby與Processing移植到Web,將各自的指令語法或原始碼檔夾入HTML標籤,做為Web Script執行
由於現今Javascript已然成為Web Assembly,或許許多常見的程式語言皆可如此
Jimmy's papa在想,如果其他程式語言都能成為網頁腳本,那對Forth來說應該也不成問題呀!
由於現今Javascript已然成為Web Assembly,或許許多常見的程式語言皆可如此
<script type="text/ruby">
#class Foo; def initialize; @foo = 'whee'; end; end; f = Foo.new; f
Time.now
</script>
<script src="/processing.js"></script>
<canvas datasrc="blendColor.pjs" width="200" height="200"></canvas>
Jimmy's papa在想,如果其他程式語言都能成為網頁腳本,那對Forth來說應該也不成問題呀!
<script type="text/forth">
/ 試印出 99 乘法表
: x 9 for cr r@ 9 for dup r@ * 2 .r space next drop next ; x
</script>
或是
<script type="text/forth" src="/9x9.f"></script>
不過想歸想,實作時或許會遇到很多有趣的挑戰吧!!
2012年10月5日 星期五
[符式相關活動]魔法自走車 Arduino eForth 程式設計 研習 競賽 第一期活動已 開放報名
臺灣符式推廣協會正在舉辦『魔法自走車趣味競賽』,主辦單位還提供免費課程及器材,教大家如何以精幹剽悍的符式(Forth)語言控制硬體
可惜Jimmy's papa住在路途遙遠的高雄,否則也很想報名參加啊!!!
可惜Jimmy's papa住在路途遙遠的高雄,否則也很想報名參加啊!!!
2012年9月21日 星期五
gForth--載入FFL(Forth Foundation Library)
FFL,一個通用的Forth詞庫(library),提供各類包括特殊資料型態,資料結構,雜錯與亂數,格式解析與檔案讀寫等等符式詞
Jimmy's papa已經玩好一陣子Forth,但總覺得沒有強大的library支援,就好像領導人背後沒有智庫運籌帷幄,事事校長兼撞鐘,實在成不了大事,所以今天抽空試試在Linux上執行gForth,然後執行FFL提供的範例,初步測試還蠻成功的
接下來,就是好好學習如何使用FFL了
Jimmy's papa已經玩好一陣子Forth,但總覺得沒有強大的library支援,就好像領導人背後沒有智庫運籌帷幄,事事校長兼撞鐘,實在成不了大事,所以今天抽空試試在Linux上執行gForth,然後執行FFL提供的範例,初步測試還蠻成功的
接下來,就是好好學習如何使用FFL了
![]() |
| 寄件者 scratchlab02 |
2012年9月19日 星期三
JForthBlocks--測試有無DoLit的效能
在Forth裡DoLit指令是用來取字面值(literal)的巧妙機制,當定義高階詞時,如有字面值(literal)編入詞典時,會同時夾帶DoLit編入字面值(literal)的前一個位址,如此一來,當Forth執行到DoLit指令時,便會自動取下一個位址的字面值(literal),這技巧在以低階語言開發的Forth系統上很有效率
不過,JForthBlocks所依賴的以Javascript開發的JeForth,DoLit是否還保有同樣的優勢?
Jimmy's papa動手修改JeForth部份程式碼,再用JForthBlocks同一份積木程式,測試看看有無DoLit的效能,是否有很大的差異,底下是跑五百萬次迴圈的輸出結果,第一次跑出的結果,有無DoLit指令似乎只有幾百微秒(milliseconds)的差異,隨後兩次的結果,執行時間會爆增,或許是垃圾收集機制的干擾
首先,測試compilecode('doLit',n)的效能
連續執行三次的結果
再來,測試compilecode({lit : n})的效能,執行時則統一由call(xt)代勞取字面值(literal)
連續執行三次的結果,看來三戰兩勝,以微幅差距領先
底下是積木的XML,可以貼到JForthBlocks的XML編輯區,便會將這次測試所用到的積木載入
不過,JForthBlocks所依賴的以Javascript開發的JeForth,DoLit是否還保有同樣的優勢?
Jimmy's papa動手修改JeForth部份程式碼,再用JForthBlocks同一份積木程式,測試看看有無DoLit的效能,是否有很大的差異,底下是跑五百萬次迴圈的輸出結果,第一次跑出的結果,有無DoLit指令似乎只有幾百微秒(milliseconds)的差異,隨後兩次的結果,執行時間會爆增,或許是垃圾收集機制的干擾
首先,測試compilecode('doLit',n)的效能
function call(xt){// high level definition inner execution loop
highLevelLooping=true; ip=xt;
do{
var id=dictionary[ip++];
//if(typeof(id)=='object'){var v=id['lit'];stack.push(v);continue;}
........
........
}
}
function exec(src){ //source code interpreting loop
.....
.....
do{token=nexttoken(); word=token;
var id=findword(token);
......
......
if(typeof(n)==='string'||n<=0||n>0){
if(compiling)
compilecode('doLit',n);// compile an literal
//compilecode({lit : n});
......
......
}while(error===0&&ntib<tib.length);}
}
![]() |
| 寄件者 scratchlab02 |
再來,測試compilecode({lit : n})的效能,執行時則統一由call(xt)代勞取字面值(literal)
function call(xt){// high level definition inner execution loop
highLevelLooping=true; ip=xt;
do{
var id=dictionary[ip++];
if(typeof(id)=='object'){var v=id['lit'];stack.push(v);continue;}
........
........
}
}
function exec(src){ //source code interpreting loop
.....
.....
do{token=nexttoken(); word=token;
var id=findword(token);
......
......
if(typeof(n)==='string'||n<=0||n>0){
if(compiling)
//compilecode('doLit',n);// compile an literal
compilecode({lit : n});
......
......
}while(error===0&&ntib<tib.length);}
}
![]() |
| 寄件者 scratchlab02 |
底下是積木的XML,可以貼到JForthBlocks的XML編輯區,便會將這次測試所用到的積木載入
<xml xmlns="http://www.w3.org/1999/xhtml">
<block type="procedures_defnoreturn" notchtype="Top_Bottom_Right" inline="false" x="137" y="55">
<title name="NAME">TestLiteral</title>
<statement name="STACK">
<block type="math_PushNumber" notchtype="TOP_BOTTOM">
<title name="NUM">5000000</title>
<next>
<block type="control_ForNext" notchtype="Top_Bottom_Right" inline="false">
<statement name="STACK">
<block type="math_PushNumber" notchtype="TOP_BOTTOM_RIGHT" inline="false">
<title name="NUM">0</title>
<value name="NEXTWORD">
<block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false">
<title name="NUM">0</title>
<value name="NEXTWORD">
<block type="stack_2drop" notchtype="LEFT_RIGHT" inline="false"></block>
</value>
</block>
</value>
<next>
<block type="math_PushNumber" notchtype="TOP_BOTTOM_RIGHT" inline="false">
<title name="NUM">0</title>
<value name="NEXTWORD">
<block type="math_PushNumber" notchtype="LEFT_RIGHT" inline="false">
<title name="NUM">0</title>
<value name="NEXTWORD">
<block type="stack_2drop" notchtype="LEFT_RIGHT" inline="false"></block>
</value>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
<block type="utility_milliseconds" notchtype="LEFT_RIGHT" inline="false" x="89" y="289">
<value name="NEXTWORD">
<block type="procedures_callnoreturn" notchtype="LEFT_RIGHT" inline="false">
<mutation name="TestLiteral"></mutation>
<value name="NEXTWORD">
<block type="utility_milliseconds" notchtype="LEFT_RIGHT" inline="false">
<value name="NEXTWORD">
<block type="stack_swap" notchtype="LEFT_RIGHT" inline="false">
<value name="NEXTWORD">
<block type="math_Minus" notchtype="LEFT_RIGHT" inline="false">
<value name="NEXTWORD">
<block type="print_DotS" notchtype="LEFT_RIGHT" inline="false"></block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</xml>
2012年9月11日 星期二
JForthBlocks--Linked List
目前JForthBlocks沒有高階的資料結構可用,或許過陣子引用其他現成的積木庫試試看效果如何,不過Jimmy's papa自己動手寫個簡單的連接串列,嗯!還蠻簡單的哩!!!
底下是配置ABCD四個記憶區塊,每個區塊都可儲存下一個連接地址與區塊紀錄的字串內容,ABCD區塊分別對應大野狼,大豬,二豬與豬小弟
不過區塊一多的話,就不能用這個法子,因為要幫每個區塊取名很麻煩!!!
底下是配置ABCD四個記憶區塊,每個區塊都可儲存下一個連接地址與區塊紀錄的字串內容,ABCD區塊分別對應大野狼,大豬,二豬與豬小弟
不過區塊一多的話,就不能用這個法子,因為要幫每個區塊取名很麻煩!!!
![]() |
| 寄件者 scratchlab02 |
2012年8月25日 星期六
JForthBlocks-以美味蟹堡當範例,八歲的Jimmy學如何使用堆疊指令
Jimmy's papa為了方便Jimmy小朋友能很快的進入狀況,以他喜歡看的卡通海綿寶寶當範例,先造好一些美味蟹堡製作手藝的中文程式積木,這樣一來他就可以專注在堆疊的操作學習上
在Jimmy小朋友邊try邊與我討論時,我也在觀察中文程式積木的命名,是否能讓小朋友快速理解單個積木的功能,再由多次嘗試錯誤的組裝過程,進一步對程式運作的原理心領神會
這段是Jimmy小朋友親自操作解說的
這整段是合集
在Jimmy小朋友邊try邊與我討論時,我也在觀察中文程式積木的命名,是否能讓小朋友快速理解單個積木的功能,再由多次嘗試錯誤的組裝過程,進一步對程式運作的原理心領神會
這段是Jimmy小朋友親自操作解說的
這整段是合集
2012年8月16日 星期四
2012年8月9日 星期四
2012年8月7日 星期二
2012年8月5日 星期日
JForthBlocks--POSTPONE與WORD的練習
這是Jimmy's papa試著解決網友提出的問題,順便當作自己的練習,也幫JForthBlocks補上了BL及WORD幾個積木
POSTPONE--可延遲立即詞(immediate words)在編譯狀態不會立即執行
WORD--依置於堆疊頂端的限定字元,解析WORD後面的字串,然後將解析好的字串置入堆疊
由於Mary尚未定義,所以不能編譯
在解譯狀態下,Mary可作為Greeting解析的對象
POSTPONE--可延遲立即詞(immediate words)在編譯狀態不會立即執行
WORD--依置於堆疊頂端的限定字元,解析WORD後面的字串,然後將解析好的字串置入堆疊
![]() |
| 寄件者 scratchlab02 |
![]() |
| 寄件者 scratchlab02 |
![]() |
| 寄件者 scratchlab02 |
![]() |
| 寄件者 scratchlab02 |
2012年6月23日 星期六
Try Google-Blockly & JeForth
Jimmy's papa目前試用Google-Blockly搭配JeForth,比起WaterBear,可以塞入更多的程式碼積木,Jimmy's papa也改寫了ContextMenu,可以切換不同方向的接槽(notch),讓Forth積木可實現橫式或直式兩種拼接風格,盡量有效的利用到PlayGround的有限空間,尤其以橫式拼接Forth積木時,總覺得我正在搞DNA序列哩,呵呵!!!
之前用WaterBear由於無法附上註解或說明,每次閱讀Forth積木時實在很是折磨腦細胞,而Google-Blockly已內建註解功能,為了讓Forth程式積木能夠更一目了然, 我特別製作了Comment積木,當直式拼接風格時,可嵌入程式積木右側
這是下圖的Forth原始碼,可印出費波那西數列(Fibonacci Sequence),參考自The Zen of Forth
之前用WaterBear由於無法附上註解或說明,每次閱讀Forth積木時實在很是折磨腦細胞,而Google-Blockly已內建註解功能,為了讓Forth程式積木能夠更一目了然, 我特別製作了Comment積木,當直式拼接風格時,可嵌入程式積木右側
這是下圖的Forth原始碼,可印出費波那西數列(Fibonacci Sequence),參考自The Zen of Forth
: Fibonacci 1 swap 1 do dup . i swap +loop . ;
: Fibonacci2 1 swap 1 do dup . i swap +loop . ;
: Main 10 Fibonacci 10 Fibonacci2 ;
Main
![]() |
| 寄件者 scratchlab02 |
2012年5月31日 星期四
JForthBlocks--用see積木幫有Create...Does>積木照張X光,果然有物件繼承的fu喔~~
Jimmy's papa查閱許多文件也看了JeForth的JS原始碼,一直搞不懂create...does>積木的運作原理,但為了搞懂如何做出Object-Oriented Forth,只好動用了Forth的X光機--see積木
底下的實驗Jimmy's papa做了個const高階積木,接著將0指定給a積木,1000指定給b積木,雖然目前用see積木還看不大清楚所有積木內部構造,但依實驗結果大約可知,const積木裡面的does>編譯後竟然變成does r>
而更有趣的是,a積木(ip位址在132)與b積木(ip位址在136)執行到最後,都會往前跳到ip位址127,也就是共用在does後面的r> @ >r r> exit,神奇吧!!!
這是產生出來的Forth原始碼,有空再附上註解
底下的實驗Jimmy's papa做了個const高階積木,接著將0指定給a積木,1000指定給b積木,雖然目前用see積木還看不大清楚所有積木內部構造,但依實驗結果大約可知,const積木裡面的does>編譯後竟然變成does r>
而更有趣的是,a積木(ip位址在132)與b積木(ip位址在136)執行到最後,都會往前跳到ip位址127,也就是共用在does後面的r> @ >r r> exit,神奇吧!!!
![]() |
| 寄件者 scratchlab02 |
![]() |
| 寄件者 scratchlab02 |
![]() |
| 寄件者 scratchlab02 |
: const create , 0 , does> @ >r r> ; 0 const a 1000 const b see const see a see b create cc 11 , 22 , see cc ' const ' a ' b ' cc a b .s
訂閱:
文章 (Atom)





















