2 part forth (907レス)
1-

406
(1): 2008/08/27(水)21:05 AAS
こういう風にしたらどう?

・引数可変のワードは # で始まることとする
・ワード [ は現在のパラメータスタックポインタの値を
 リターンスタックに積む
・ワード ] は現在のパラメータスタックポインタの値と
 リターンスタックポインタのトップの値の差から
 パラメータ数を計算しパラメータスタックに積む

たとえば

[ 10 20 30 ] #sum

と書くと、#sum実行直前にはパラメータスタックは

10 20 30 3

となっていて、#sumは3つの数の和を求めればいいことがわかる。
407
(1): 404 2008/08/27(水)22:38 AAS
>405
そこは構文糖使った方がよろしいかと (a ? b ! cの三項演算子とか)

>406
それも考えたけど、そうするとConcatenativeのメリットが死ぬんだよね。

できるだけ前の計算結果に依存しないように考えると、セパレータのようなものを
スタックに積むのは良くないので、ワード単体で引数までを意味するようにしたい、
ということですな。
408: 2008/08/28(木)02:39 AAS
prologみたいにsum/3みたいにするとか。
よく判ってないが。
409: 2008/09/19(金)17:01 AAS
引数管理しなきゃいけないようなコードの構成だと崩壊しそう
410: 2008/09/25(木)03:11 AAS
しばらくforthやってたら他の言語がいじれなくなってて驚いた。
のめり込むのは危険だなw
411
(1): 2008/09/25(木)03:16 AAS
>>407
そのセパレータってリスト終端のnullに相当するから
あながち間違ってないと思う。
412
(1): 2008/09/25(木)21:54 AAS
concatenativeの論理を詰めて行くと、
スタックの機構はコード設計のための因子から外されるのかも。
413: 2008/09/25(木)22:34 AAS
>411
Wordの中でWordを呼ぼうとすると破綻するよ。

>412
結局はトップを基点とした対称性(みたいなもの)になるからな。
対称性があれば何でもOK
414: 2008/10/01(水)00:29 AAS
スタック型プログラミング言語の最少命令セットを探して
Whitespaceに辿りついたのですが、
これよりも言語仕様的に小さいスタック型言語ってあります?
415: 2008/10/01(水)01:55 AAS
define
call
return
conditional jump
push
pop

これだけで足りるかな?
416: 2008/10/01(水)07:09 AAS
callに条件をつければjumpも省けるんじゃないか?
417
(1): 2008/10/02(木)03:17 AAS
それより、ひと目で何やってるか判るforth作ってくれないかな。
>>54-65とか何やってるのかわからん。
記号覚えればいいんだろうけど。
: は定義っぽいということは文脈で判った。許す。
>rとかr>は何かと。
;は文の終り?

LISPでいう 'a は (quote a)です、みたいに特殊記号をあまり使わずに
誰が見ても大体判るように、平易な形にならないかな。
418: 2008/10/02(木)17:56 AAS
>>417
: word
でワードの定義開始、;で定義の終端
>r,r>はリターンスタックへのプッシュとポップ
>>54の括弧内はそのワードを実行するとデータスタックの状態がどう変わるかをコメントで表している
他の言語と違って裸のスタックが丸見えなんよ
419
(1): 2008/10/03(金)02:22 AAS
リターンスタックに何をプッシュ(とポップ)するの?TOSの内容ってこと?
>rとr>って判りにくいと思う。
一瞬で見分けられないというか。
不等号ちがうんかと。
記号使わずに全部記述的にできないかな。
mindとかそんなのかな。
420: 2008/10/03(金)03:00 AAS
わかりやすい文法が欲しいのならforth系はあきらめた方がいいと思うよ
421: 2008/10/03(金)06:08 AAS
: pushTOStoReturnStack postpone >r ; immediate
: popFromReturnStackToTOS postpone r> ; immediate
422: 2008/10/03(金)12:26 AAS
自分も420に賛成する、forthは裸の2スタックマシンのアセンブラと思えばいいんだけど、それがつらいとちょっときついと思う
ただ、それがインタラクティブ環境を作るあたりと小さな核で構築できるのが非常に面白いのでがんばって覚えてみてよ。

逆に言うと簡単にぶっ壊れるとも言う
423: 2008/10/03(金)16:59 AAS
Cとかの他の言語の常識持ち込もうとしてるヤツいないか?
「Forthではこう書く」ってのに納得いかないなら
悪いことは言わんから、使うのやめとけ
424: 2008/10/03(金)17:54 AAS
スタックっつうのはあくまで機械にやさしいものであってユーザーフレンドリーなものじゃないしな
425: 2008/10/03(金)18:38 AAS
頻繁にスタックを意識しないといけないのは悪いForthコード
426
(1): 2008/10/03(金)20:05 AAS
正直アセンブラの方が楽だよ
427: 2008/10/03(金)20:24 AAS
慣れると気持ちいいよJoy。forthは知らんけど
428: 2008/10/03(金)20:29 AAS
>426
Forthは仮想スタックマシンのアセンブラだから、
(仮想)マシンの理解度によるだろな。
429: 2008/10/03(金)22:29 AAS
いや、もっと視認しやすい記号セットを使ってくれって話だろ。
ハイライトできるエディタで単語登録するか、トランスレータでもかますのがいいと思う。
430
(3): 2008/10/03(金)23:01 AAS
ところでリターンスタックって別に必要なの?
普通のCPUは1本だよね。
スタックに対して相対アドレッシングがないからってことかな?
431: 2008/10/03(金)23:57 AAS
>419
>rとr>は確かに見た目がわかりにくい。
よほどのことが無い限り使わない。
localがあれば要らない。

>430
呼出しのときにデータスタックで直接パラメターを渡すためでしょう。
432: 2008/10/04(土)00:00 AAS
>>430
普通のアーキテクチャだと関数呼び出しのスタックにパラメータも突っ込んじゃうけど
forthはデータのpushと関数呼び出しの戻りアドレスが入るスタックが別なんよ。

っていうか別だから面白いことができるので、一緒だったらループとかで涙が出そうだと思う。
433: 2008/10/04(土)00:10 AAS
SP, BPレジスタに相当するものがあれば良いのでは
434: 2008/10/04(土)17:45 AAS
リターンスタックとデータスタックが一緒だと、
リターンアドレスを壊さないようにデータをいじるのがメンドイ。
リターンアドレスが詰まれている位置を避けるようにして
スタックをアクセスしなきゃいけないから。
それはSPとBPがあってもメンドイことに変わりはない。
435: 2008/10/04(土)19:46 AAS
>>430
まあ、便利だから?
実装としてはバローズのメインフレーム見たく演算とリターン
アドレス保存を一本のスタックでこなすものもあるよ。
1-
あと 472 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s