Forth

提供: langdev
移動: 案内検索

Category:プログラミング言語: Forth[編集]

言語名 
Forth
作者 
Charles H. Moore
開発年 
ウェブサイト 

テンプレート:プログラミング言語


Category:プログラミング言語処理系: Gforth[編集]

言語 
Forth
処理系名 
Gforth
開発年 
ウェブサイト 
http://www.gnu.org/software/gforth/
パーサー 
処理系開発言語 
GNU
出力形式 
Original VM code

テンプレート:プログラミング言語処理系


Vagrantfile (使い方)[編集]

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.vm.provision :shell, :inline => <<-EOS

aptitude update -y
aptitude install -y gforth

  EOS
end

テンプレート:サンプル環境

Hello, world![編集]

vagrant@precise64:~$ gforth -v
gforth 0.7.0
vagrant@precise64:~$ cat > hello.fs    
." Hello,world!" CR
BYE
vagrant@precise64:~$ gforth hello.fs 
Hello,world!


Binary size[編集]

vagrant@precise64:~/gforth-0.7.2$ ls -alh gforth.static gforth gforth.fi 
-rwxrwxr-x 1 vagrant vagrant 1.9M Aug 24 08:35 gforth.static
-rwxrwxr-x 1 vagrant vagrant 146K Aug 24 08:31 gforth
-rwxrwxr-x 1 vagrant vagrant 354K Aug 24 08:31 gforth.fi

変数名に任意の文字が使える[編集]

マニュアルによると、次のような文字がWORD(関数名)として使えるとの事。 (てか、数字だけの関数名ってすごいな。)

word
!@#$%^&*()
1234567890
5!a

日本語の名前が使えるか試した。

vagrant@precise64:/vagrant$ gforth -v
gforth 0.7.0
vagrant@precise64:/vagrant$ cat japanese.fs 
: を ;
: か ;
: が ;
: に ;
: と ;
: から ;

: こぴー dup ;
: より小さい < ;
: かんけいなく drop ;
: もうかたほう swap ;
: 引く - ;
: 足す + ;


: ふぃぼなっち
  こぴー が 2 より小さい if
    かんけいなく 1
  else
    こぴー から 1 を 引く recurse ( ふぃぼなっち ) と
    もうかたほう から 2 を 引く recurse ( ふぃぼなっち ) を
    足す
  endif ;

10 ふぃぼなっち .
BYE
vagrant@precise64:/vagrant$ gforth japanese.fs 
89
vagrant@precise64:/vagrant$ 

NFCとNFDが混じったらどうなるか?[編集]

NFCとNFDで正規化された文字は別の文字扱いされるようだ。

vagrant@precise64:/vagrant$ hexdump -c japanese2.fs 
0000000   :       � 201 214       .   "       T   h   i   s       i   s
0000010       n   f   c   !   "       C   R       ;  \n   :       � 201
0000020 213   � 202 231           .   "       T   h   i   s       i   s
0000030       n   f   d   !   "       C   R       ;  \n  \n   .   "    
0000040   I   '   l   l       c   a   l   l       n   f   c   .   "    
0000050   C   R  \n   � 201 214  \n   .   "       I   '   l   l       c
0000060   a   l   l       n   f   d   .   "       C   R  \n   � 201 213
0000070   � 202 231  \n  \n   B   Y   E  \n                            
0000079
vagrant@precise64:/vagrant$ gforth japanese2.fs 
I'll call nfc.
This is nfc!
I'll call nfd.
This is nfd!
vagrant@precise64:/vagrant$