5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

: Mops ( オブジェクト指向FORTH -- ) ;

1 : 1:01/09/10 19:41
ニッチ(Mac)の中のニッチ(FORTH)。
オブジェクト指向FORTH言語、Mopsについて語るスレ。
いや、語れるのか‥‥?

181 :デフォルトの名無しさん:02/01/27 23:47
>>180
我 君 許

182 :デフォルトの名無しさん:02/02/01 23:51
ficlってoopなの?

183 :デフォルトの名無しさん:02/02/03 20:41
>>182
一応できるみたいね。使った事ないけど。

http://ficl.sourceforge.net/ficl_oop.html



184 :デフォルトの名無しさん:02/02/03 21:39
いや、FORTHって豪快だな〜(笑
Perlの上を行ってるな〜
なんでも突き通せは思想なのかもなあ。


なんか関数型を使ったあと使うとめまいがしそうだ。

#FORTHに悪意のある書き込みではないので念のため。

185 :デフォルトの名無しさん:02/02/06 17:18
確かにとんがってる感はある。

186 :デフォルトの名無しさん:02/02/07 01:31
あげとくよ。

187 :デフォルトの名無しさん:02/02/09 00:29
もいっちょ

188 :デフォルトの名無しさん:02/02/09 01:10
結局さあ、使ってる人いるの?
おれスタック操作怖くてできない。

189 :デフォルトの名無しさん:02/02/09 01:27
FCodeを語れそうなスレはここだけですか?

190 :デフォルトの名無しさん:02/02/09 18:51
空ageしかできんなぁ。

191 :デフォルトの名無しさん:02/02/10 00:58
>>188
え〜と、Mac用のフリーソフトを作ったことならあります。
でも普通のアプリケーション開発にFORTHを使う人は大変めずらしいと思いマスです。
Open FirmwareとかOpen Bootとか向けにFORTHで書かなければならなくなった
デバドラ屋さんは結構いるかも知れませんが職業プログラマじゃないので知りません。
スタック操作は慣れると不定個の返り値をもつ関数とか引き数としてスタックに積んだ
値を使っても使わなくても良い多態とかトリッキーなコードを書いてしまうという
両刃の剣。でも面白いですよん。


192 :デフォルトの名無しさん:02/02/15 07:39
http://www.jwdt.com/~paysan/mini-oof.html
よりわずか12行のOOP拡張

: method ( m v -- m' v ) Create over , swap cell+ swap
DOES> ( ... o -- ... ) @ over @ + @ execute ;
: var ( m v size -- m v' ) Create over , +
DOES> ( o -- addr ) @ + ;
Create object 1 cells , 2 cells ,
: class ( class -- class methods vars ) dup 2@ ;
: end-class ( class methods vars -- )
Create here >r , dup , 2 cells ?DO ['] noop , 1 cells +LOOP
cell+ dup cell+ r> rot @ 2 cells /string move ;
: defines ( xt class -- ) ' >body @ + ! ;
: new ( class -- o ) here over @ allot swap over ! ;
: :: ( class "name" -- ) ' >body @ + @ compile, ;


193 :192:02/02/15 07:43
使用例:

クラス定義

object class
cell var text
cell var len
cell var x
cell var y
method init
method draw
end-class button

メソッド定義

:noname ( o -- ) >r
r@ x @ r@ y @ at-xy r@ text @ r> len @ type ;
button defines draw

:noname ( addr u o -- ) >r
0 r@ x ! 0 r@ y ! r@ len ! r> text ! ;
button defines init

継承

button class
end-class bold-button

: bold 27 emit ." [1m" ;
: normal 27 emit ." [0m" ;

:noname bold [ button :: draw ] normal ; bold-button defines draw

インスタンスの生成とメソッド呼び出し

button new Constant foo
s" thin foo" foo init
page
foo draw

bold-button new Constant bar
s" fat bar" bar init
1 bar y !
bar draw


194 :デフォルトの名無しさん:02/02/15 23:18
>>193
クラス定義はおおっ!って感じだけど、
メソッド定義以降、わけわからんのでガクゥ・・

このへんから
>:noname ( o -- ) >r
>r@ x @ r@ y @ at-xy r@ text @ r> len @ type ;
>button defines draw

forthの日本語の仕様書/規格書ってオンラインで無いですか?
例えば、193のコードを動かすには最低限、どのレベルの規格に準拠している
必要がある、とか。
なんだかその辺が混沌としてるイメージがあって、
なかなか取っ掛かかれないのれす。

195 :192:02/02/16 02:37
>>194
>>192のOO拡張コード自体はANS Forth上で動作します。
pForthでクラス定義が可能な事を確認しました。
GForthのライブラリには上記コードがOO拡張パッケージの
一つとして付属しているみたいです。

‥‥ANS Forthの日本語仕様書はWebで見かけた事がないですねぇ。


196 :デフォルトの名無しさん:02/02/17 01:53
>>194
:noname は無名ワードの定義開始ワードですぅ。セミコロンまでの部分がコンパイルされますが、
通常のコロン定義と違って特定のワードにバインドされません。
その代わりに実行アドレスがスタック上に残ります。ANS Forthが標準で持っているワードです。
( から )まではコメントです。
>rはパラメタスタックのトップをPOPしてリターンスタックにPUSHするワードです。
メソッド呼び出し時のパラメタスタックのトップにはオブジェクトが積んであるはずなので、
オブジェクトをリターンスタックのトップに移したということです。
r@はリターンスタックのトップを複製してパラメタスタックにPUSHするワードです。
リターンスタックのトップに積んだオブジェクトは保持されたままです。
つまりこの文脈ではr@はselfに相当しているわけです。

r@ x @

でインスタンス変数xの内容をパラメタスタックに積む、という動作になります。
at-xyはカーソル位置を移動するワード(たぶん)。r>はリターンスタックのトップをPOPして
パラメタスタックにPUSHします。リターンスタックをワードが呼ばれた時の状態に戻しておかない
と暴走します。(゚∀゚)
セミコロンで定義が終了したあとのスタックトップには先ほど定義した無名ワードの実行
アドレスが残っていますから、それをbuttonクラスのdrawメソッドにバインドするのが

button defines draw

の部分です。


197 :デフォルトの名無しさん:02/02/17 01:56
え?スタックって何本あるんですか?
今までのお話だと、
リターンスタック
パラメタスタック
だけですか?
単に「スタック」というと、どれのことですか?

198 :デフォルトの名無しさん:02/02/17 02:00
単にスタックと言うとパラメタスタックのコトです。
伝統的にはパラメタスタックとリターンスタックの二本ですが、流れ制御用のスタック
を持っていたり、float型専用スタックを別に持っている実装も存在しますね。


199 :デフォルトの名無しさん:02/02/17 02:03
>>198
なるほど。ありがとうございます。
分けるのはやっぱり効率良いからですかね。


200 :デフォルトの名無しさん:02/02/17 02:11
>>199
> 分けるのはやっぱり効率良いからですかね。
そうですね。パラメタとリターンアドレスが混在してしまうと、スタック上のデータの
操作が複雑になってしまいますし。
流れ制御用スタックについても同様な理由のようです。
float型は精度や実装によってスタックの1cellのサイズが通常の整数型と異なる
場合があるというのが理由かと思われます。



201 :デフォルトの名無しさん:02/02/20 19:17
>>192に対する構文糖(5行)

: :method :noname postpone >r ;
: ;method postpone r> postpone drop postpone ; ; immediate
: self postpone r@ ; immediate
: get @ ;
: set ! ;

↓使用例。ちょっとだけ見やすい?

object class
  cell var x
  cell var y
  method init
  method print
end-class point

:method ( x y -- )
  self y set
  self x set
;method point defines init

:method ( -- )
  self x get .
  s" : " type
  self y get .
;method point defines print

point new constant foo
10 20 foo init
foo print


202 :デフォルトの名無しさん:02/02/21 01:45
Forthチップ、Forthマシンがあるのなら、オブジェクト指向Forthチップと言うのは無いのですか。
116で「FORTHの本質」という言葉が出てきましたが、
「仮想マシンのアセンブラであり、かつ構造化言語」というのがFORTHの本質だと思っています。
「オブジェクト指向FORTH」の名前で
「仮想マシンのアセンブラであり、かつオブジェクト指向言語」
つまり、チップが作り得るものを想像します。

203 :デフォルトの名無しさん:02/02/21 20:38
>>202
+ 激しく電波 +

204 :デフォルトの名無しさん:02/02/21 23:07
>>202
オブジェクト指向拡張部分をROMに焼いてチップ上に乗っけちゃえば
それっぽく見える代物になるか?
デムパっぽいな〜。

Color Forthもデムパっぽいけどナ〜。(´Д`)


205 :デフォルトの名無しさん:02/02/21 23:15
夢でも見ているのか。
このスレの稼働率とは思えない

206 :デフォルトの名無しさん:02/02/21 23:37
>>205
忘れた頃に上がるナリ。このスレの特徴ナリ。

http://hoge.s7.xrea.com/tiki/tiki.cgi?c=v&p=Forth

↑ム板 2ch TikiのForthのページ。ネタがあったら追加して欲しいナリ。
‥‥‥誰かPostscript、教えてホスィなり。


207 :202の名無し:02/02/22 16:46
Mopsのチップというのは作れるのですか。

208 :デフォルトの名無しさん:02/02/22 16:58
>202
Java や Smalltalk のVMとか、Lispチップとかそんな感じじゃないかな。
Mops チップありでしょう。需要はないけど。



209 :デフォルトの名無しさん:02/02/22 23:11
LISPだと汎用の内部イテレータ(map-carやら)が用意されてますけど、
forthで一般的なやつって無いですか?

210 :デフォルトの名無しさん:02/02/23 00:21
>>209
Lispのmapに相当するような汎用イテレータですか?
素のままのForthではスタックへのアクセス以外はメモリへのダイレクトな
アクセスのようなものなので、「汎用的なイテレータをこなすワード」というよりは
汎用的なアクセサをもつ抽象化された「データ構造」自体が存在しないような‥‥‥。

いや、スタックがあった‥‥‥(´Д`)

Mopsの場合はクラスライブラリでイテレータ関連の機能に対応してるかな。
sequenceクラスのインターフェース(多重継承とかで)を持っていれば、
BEGIN each: <obj> WHILE <do something to the element> REPEAT
みたいなことは出来ます。

211 :デフォルトの名無しさん:02/02/23 01:15
なんだなんだ?何が起こった?業界に異変?

212 :デフォルトの名無しさん:02/02/23 01:38
211の脳内革命を確認。

213 :デフォルトの名無しさん:02/02/23 03:38
↓似非map?ぽいものを定義してみた。

0 value SavedDepth
: (( depth -> SavedDepth ;
: )) depth SavedDepth - ;
: map ( P1...Pn n xt -- Q1...Qn n )
  over >r >r
  BEGIN dup 0 > WHILE swap r@ execute r> r> rot >r >r >r 1 -
  REPEAT
  drop r> drop r@
  BEGIN dup 0 > WHILE r> r> -rot >r 1 - REPEAT
  drop r> ;



214 :213:02/02/23 03:38
使い方
・スタック上に一次元配列を作る。

 (( 1 2 3 4 5 ))

 各要素の後に要素の数をスタックに積んだ状態になる。
 上の例だとスタックの状態は: 1 2 3 4 5 5

・配列の要素一つに対する操作用ワードを定義する。

 : e++ 1 + ;

 ↑上のe++はスタックトップの値を1だけ加算して返す。

 (( 1 2 3 4 5 )) ['] e++ map とすると、
 (( 2 3 4 5 6 )) がスタックに返る。

 : countUp ['] e++ map ;

 と定義すれば、 (( 1 3 5 7 )) countUp で、
 (( 2 4 6 8 )) がスタックに返る。



215 :デフォルトの名無しさん:02/02/23 09:55
>>213-214
貴様それで何をたくらんでいる!?
まさか・・・世界征服かっ!?

216 :デフォルトの名無しさん:02/02/23 16:41
>>215
世界征服はJava VMにまかせた!!(゚∀゚)



217 :デフォルトの名無しさん:02/02/23 17:26
>>215-216
和んだ。

ていうかさ、変数使わずにスタックだけでガシコンガシコン
プログラム組んだら、何がよくなるの?

218 :デフォルトの名無しさん:02/02/23 17:39
>>217
局所性‥‥かな?


219 :デフォルトの名無しさん:02/02/23 23:55
>>213の定義だと評価の順序が右から左なので左から右に評価するように変更。

: mapl ( P1...Pn n xt -- Q1...Qn n )
  swap dup >r
  BEGIN dup 0 > WHILE rot r> swap >r >r 1 - REPEAT
  drop r@ swap >r
  BEGIN dup 0 > WHILE r> r> r> -rot >r dup >r execute swap 1 - REPEAT
  drop r> drop r>
;

サンプル↓

: dspNum ( n -- n ) dup . ;
: tpl ['] dspNum mapl ;
と定義した時、
(( 1 2 3 4 5 )) tpl
で、
1 2 3 4 5
と表示される。



220 :デフォルトの名無しさん:02/02/27 23:49
http://www.limo.fumi2kick.com/forum/lm_forum02.html
Forthタン萌え

221 :デフォルトの名無しさん:02/02/28 00:49
>220 人気投票最下位...

222 :デフォルトの名無しさん:02/02/28 00:56
最下位ではぬゎーいっ!!
18人エントリー中の9位であーる。
9位入賞と言ってくれ。
でないと泣く。


223 :デフォルトの名無しさん:02/03/01 21:40
++forth

224 :デフォルトの名無しさん:02/03/06 22:08
Forth.NET

225 :デフォルトの名無しさん:02/03/10 01:37
#include <stdio.h>
#define cmdin ">>"
#define stksize 256

226 :22:02/03/10 04:23
数日前、つひにMac OS Xをゲトーしました。
Cocoaがまだ良く分からないので、Standard Toolでもって、
ターミナルから動くようにだけしてみたヘタレです‥‥‥。

http://www.geocities.co.jp/SiliconValley-SanJose/4733/



‥‥‥‥‥‥寝る。


227 :202の名無し:02/03/11 02:08
手続きもオブジェクトにしてifもwhileもメッセージと言う具合にできるでしょうか。Smalltalkのように制御構造もメッセージで実現するわけです。もしかしたらその方が実装が簡単になりませんか。

228 :22:02/03/11 07:00
‥‥‥‥‥‥起きた!
>>227
Smalltalkのようにすべてがオブジェクトな世界なら、その方が美しくてイイ気がします。
‥‥‥Forthのことは忘れて一から独自言語にしてしまいますか。
比較演算子がスタックの上にbool型のオブジェクトを生成すればいいのかな?
でifTrue;メッセージをsendするという具合に。
手続きオブジェクトがレシーバになるという実装もアリかも‥‥‥。
‥‥‥でも実装の手間の割に効率は良く無さそうなのでヤル気が萎えるです。
アリモノのif else thenでいいぢゃん、とForthプログラマとしては考えてしまいます。
でもライブラリとかのコードを書くときには、簡潔で見栄えの良い表記になるかも。
(実装というかコード記述が楽になるのはこのレベルに達したときですよね。)

ところで、手続き渡しをしたいときにForthプログラマは伝統的に、

['] someWord

みたいな感じで、あるワードのエントリをスタックに積んでおいて、適当な時に
executeしていたわけですが、もう少し真面目にブロッククロージャに相当するモノを
実装するというのはイイかもしれないです。



229 :22:02/03/12 23:49
急な思いつきでGikoForthを非分かち書き日本語風に
書けるようにしてみますた。

クラス「 ギコハニャ〜ン 」は「オブジェクト」を継承し
  『 話せ: とは"逝ってよし"を文字列表示し改行』を実装する

クラス「 ギコフッサール 」は「ギコハニャ〜ン」を継承する

ギコハニャ〜ン ギコ
ギコフッサール フサフサ

ギコが話せ。
フサフサが話せ。


みたいに。

内部的には非分かち書き→分かち書きの処理をかましただけなんですけど、
該当部分はGikoForth自身でGiko.fth内に書いてあるので、Project Builderを
持ってなくてもGikoForth自身でいじって遊べまふ。
>>226のリンク先にうぷしてあるので、存分にいぢって下ちい。


230 :202の名無し:02/03/13 03:00
条件分岐のネストで厄介なことになりそうです。
条件分岐の構文としては
条件成立時の手続き 条件不成立時の手続き 条件判定手続き ifメッセージ
(条件成立時の手続き、条件不成立時の手続き、条件判定手続きをスタックに積んで、
スタックトップの手続きオブジェクトがifメッセージを受け取る)
と言うものを考えていました。しかしこれで二つの条件分岐をネストすると
後から実行される条件判定が前に来てしまいます。
先に実行されるものが先に記述される上手い構文があるか、
それともこれこそオブジェクト指向FORTHらしい構文と思うか、
もう少し考えてみます。

231 :22:02/03/13 04:06
>>230

_{ ." true" } _{ ." false } _{ c true = } :if

上のような文法を持つ架空スタック言語があったとして、

_{ ." true1" } _{ ." false1" } _{ c1 true = }
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if :if


c1,c2共にtrueの時こういう風に実行しようとすると、

true2
true1

という順序になってしまうということでしょうか?
自然です。‥‥それでこそスタック。
と、いう冗談は置いておいて、

_{ ." true1" } _{ ." false1" } _{ c1 true = } :if
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if

のように単純に並列ではダメなのですか?


232 :22:02/03/14 03:03
>>226
コソーリ非分かち書きのバグ潰しをしました。
しばらくまた放置するとおもいます‥‥‥。
ではでは。


233 :1:02/03/14 05:02
他の言語によくある構文で

if c1 then
if c2 then true2 else false2 endif
else
else1
endif

と言うケースではc1の判定の後にc2の判定が行われますが、

_{
_{ ." true2" } _{ ." false2" } _{ c2 true = } :if
} _{ ." false1" } _{ c1 true = } :if

とc2が先に来てしまうと言うことです。



234 :22:02/03/14 14:31
>>233
了解しました。そういえばネストって書いてありましたね。(恥
実行順序は正しくても人間の思考の流れと記述が逆転するので
プログラムしづらいと‥‥‥。
では………

_{ c true = } _{ ." true" } { ." false" } :if

という構文にすれば、

_{ age 30 < }
{
_{ age 16 < } _{ ." タイーホ" } _{ ." ウマー" ) :if
} _{ ." マズー" } :if

となって条件の判定の順序が人間の思考と近いかもしれないですね。

_{ c true = } _{ ." true" } :ifTrue
_{ c true = } _{ ." false" } :ifFalse

という構文もあるとイイかもしれません。
制御構文はそもそも手続きに対するメッセージだと言う感じもしますし。


235 :202の名無し:02/03/15 20:11
_{ c true = } _{ ." true" } _{ ." false" } :if

という構文では、:ifメッセージのレシーバは_{ ." false" }ですか。
それとも:ifメッセージは常にスタックの
二つ奥に送られると言うことでしょうか。

236 :22:02/03/15 20:27
>>235
_{ ." false" } がメッセージを受け取ればいいと思うんですけど。
どんなものでしょう?


237 :22:02/03/15 20:46
ところで、GikoForthへ手続きブロックの実装をやってみました。
下のIF文は同じ構文になるようにしただけの似非実装でOOではないです。
(そもそもGikoForthにはまだオブジェクト以外の標準クラスがないので。)
道具が揃ったらオブジェクトでラップしようと思いまふ。

バイナリとソースは今晩うぷします。たぶん。


☆ アルファベットでの表記の例
: test { age | func -- }
  :[ bl emit age . cr ]; -> func
  age 30 <
    :[ age 16 <
      :[ ." タイーホ" func call ];
      :[ ." ウマー" func call ]; :if
    ];
  :[ ." マズー" func call ]; :if
;

☆ 日本語風表記での例
単語 検査 { 年齢 | 年齢表示 -- } を
  【空白を一文字表示し年齢を数値表示し改行する】→年齢表示
  年齢が30より小さいとき
    【年齢が16より小さいとき
      【"タイーホ"を表示し年齢表示を呼び出す】を
     そうでないとき
      【"ウマー"を表示し年齢表示を呼び出す】を
     を選んで実行
     】
  そうでないとき
    【"マズー"を表示し年齢表示を呼び出す】を
  を選んで実行
と定義




238 :デフォルトの名無しさん:02/03/16 05:40
: age { age -- } ;


239 :202:02/03/19 00:08
>>236
このばあい_{ ." false" }では
どのようなメソッドを実行したらよいのでしょうか。
Smalltalkではtrue(false)クラスではtrue(false)の場合の手続きだけを実行する
と言う風にしていますが、上手いメソッドが思い付きません。

240 :22:02/03/19 01:13
Trueクラス、Falseクラスに
oProc oBool :ifTrue
oProc oBool :ifFalse
というメソッドが既に存在していれば、

:m :if ( oBool oProcT -- )
  self -rot over
  :ifTrue
  :ifFalse
;m

こんな感じで良いのではないでしょうか?
-rot ( a b c -- c a b )
over ( a b -- a b a )
というスタック操作ワードを使用していますが。


241 :22:02/03/19 01:17
えせMops表記で分りにくかったらごめんなさいです‥‥。


242 :デフォルトの名無しさん:02/03/19 01:30
>>240
Forthの構文ってきれいだね。
おもしろそうだな。

243 :デフォルトの名無しさん:02/03/20 17:20
>>240
over :ifTrue
self swap :ifFalse
でもいい?


244 :22:02/03/21 00:48
>>243
あう。そのほうがシンプルですねぇ。
-rotなんていうマニアックな命令をつかわなくて良いし‥‥。
恥ずいのでsage


245 :202の名無し:02/03/22 01:26
裏で手続きが前にくる構文を使っているのですね。
これなら表でこの構文を使う方が好みです。

246 :22:02/03/22 02:18
>>245
あくまでもオブジェクトにこだわった実装の場合のシンタックスシュガー
ってことで。てへへ。
自分がやるときはFORTHのプリミティブ使って手続きクラスに直接実装しちゃうと思います。


247 :22:02/03/22 02:20
下げたまんまだった‥‥。
いちおうあげときます。


248 :デフォルトの名無しさん:02/03/22 09:53
わけわからん。
説明されても、やっぱりわけわからん。
おれには一生理解できないのか。

249 :22:02/03/22 20:14
>>248
わかりにくくてスンマソン。(T-T)
ローカル変数を使って、

:m :if { oBool oProcT -- }
  oProcT oBool :ifTrue
  self oBool :ifFalse
;m

でもよかったんだけどそれじゃ身も蓋もないと思ったので‥‥。
スタック操作は確かにわかりにくいと思います。自分も書くときはすぐに
ローカル変数を使って楽をします。

話は変わりますが、ブロックが前にくるタイプのif文のオブジェクトの
スタック上の順番をどうするのが良いか、もう少しいろいろと議論した方が
良いのかもしれませんね。



250 :22:02/03/23 03:54
↓GikoForthですけども………、
http://www.geocities.co.jp/SiliconValley-SanJose/4733/

ブロックを使った例外処理とローカル変数を含む四則演算の中置記法の処理を
実装しまひた。
:[ 2 throw> ]; >catch
とか
i[ A^2+2*A+1 ] -> B
とか書けます。

あと地味な拡張として、アルファベット表記の動的束縛はこれまでは

anObject message: []

と書いていましたが、日本語表記との対応を考えて、

anObject ::message

とも書けるようにしまひた。
今度はかなり長く放置することになると思います。

‥‥‥‥寝る。


251 :デフォルトの名無しさん:02/03/25 01:37
は〜〜〜〜〜〜〜〜ぁぁっ、




あげ。


252 :ムーア:02/04/01 02:33
空揚げ

253 :22:02/04/07 02:20
>>252
いつもメンテしてくれてありがとん。


GikoForth : http://www.geocities.co.jp/SiliconValley-SanJose/4733/
なんだかんだでやっぱり気になるので、また手を付けてしまいました‥‥。

オブジェクト拡張を>>82のclassM10ベースに移行しました。
というわけで多重継承可になりました。
動的束縛しまくるGikoForthの場合、多重継承ベースのクラス構成だと、
遅くてたまらんとオモタのでスーパークラスを持てずインスタンス化
できないmix-inモジュールを定義できるようにしまひた。
非分かち書き拡張部にでっかいバグがあったので潰しました。
そのためすこし構文が変更になりました。

あー今度こそヤメルぞ‥‥‥。



254 :コピペですまん:02/04/10 00:01
☆ モナーとじゃんけんゲーム

★ クラスの定義
クラス「じゃんけんモナー」は<オブジェクト>を継承し
  ☆ メソッドの定義
  『手: ( -- 手 ) とは
    3までの乱数に1を足す』
  『表示: { 手 -- } とは
    手が1と等しいならば"ぐー"を表示つぎに
    手が2と等しいならば"ちょき"を表示つぎに
    手が3と等しいならば"ぱー"を表示つぎに』
  『じゃんけん: { | 相手の手 モナーの手 -- } とは
    ここから
      "なにをだすモナ? 1:ぐー 2:ちょき 3:ぱー それ以外:やめる"を表示し改行
      数値入力→相手の手
      自分の手。→モナーの手
      相手の手が0以下相手の手が4以上のどちらかならば逝ってよし
      つぎに
      "あなたの手:"を表示し相手の手を自分で表示。改行
      "モナーの手:"を表示しモナーの手を自分で表示。改行
      モナーの手と相手の手が等しいならば
        "引き分けモナ"を表示し改行
      さもなければ
        モナーの手から相手の手を引き1と等しい
        モナーの手から相手の手を引き-2と等しい
        のどちらかならば
          "あなたが勝ったモナ"を表示し改行
        さもなければ
          "モナーが勝ったモナ"を表示し改行
        つぎに
      つぎに
    を再び繰り返し』
を実装する

★ 「じゃんけんモナー」クラスのインスタンス「モナー」の生成
じゃんけんモナー「モナー」

☆ 「モナー」インスタンスの「じゃんけん」メソッドを起動
モナーとじゃんけん。

255 :デフォルトの名無しさん:02/04/18 21:22
深度280。sageヨシ。


256 :デフォルトのムーアたん:02/04/22 22:29
「メンテ」

257 :22:02/04/27 13:40
深度406より浮上。
>>256
ムーアたん‥‥(;´Д`)ハァハァ

GikoForth : http://www.geocities.co.jp/SiliconValley-SanJose/4733/
更新しますた。

Objective-CのCategoryぽいものを実装。
インスタンス変数は追加できないところがCategory風(?)。
(ところでアスペクト指向ってなんすか?)

JTerminalを使用するにはデヴェツールでビルドが必要なことに
いまさら気が付いてFinderから起動することのできるGikoForthX
アプリケーションをでっちあげますた。

これでようやく本当にデヴェツール持ってなくてもお試しできます。



258 :22:02/04/27 13:42
いま一つ気になることが‥‥‥。
ライセンスってどうするべきなんでせう??
pForthはパブリックドメイン。
classM10とBNFパーサーはライセンス不明。
たぶんパブリックドメインのような気がします。
(Forthコミュニティの伝統??嘘かも。でもMopsもPDSだし。)

GikoForthはGPLにすべきなんだろうか?
パブリックドメインでもいいのかな?
迷ってます。

あとターミナル版GikoForthは他のUNIX系OSでもコンパイルし直すだけで
そのまま動作するような気がします。
‥‥‥‥‥makeファイルってなんすか?(T-T)


259 :ダミー・ムアー:02/04/27 18:13
>>258
>ライセンスってどうするべきなんでせう??
全部自分で作れば即解決。ガンバ!
>迷ってます。
全部自分で作れば即解決。ガンバ!
>‥‥‥‥‥makeファイルってなんすか?(T-T)
ググールで【マケファイル】って検索したらでてきます。

260 :22:02/04/27 23:19
>>259
ダミーたん‥‥(;´Д`)ハァハァ


>全部自分で作れば即解決。ガンバ!

Cocoaネイティブに作り直すときにフルスクラッチに‥する?(氏

> ググールで【マケファイル】って検索したらでてきます。

http://www.google.co.jp/search?q=cache:Ex07HNJGMYUC:www.topworld.ne.jp/tw/red/sakura/0101/0112.html+%81y%83%7D%83P%83t%83%40%83C%83%8B%81z&hl=ja

(;´Д`)ハァハァ (;´Д`)ハァハァ (;´Д`)ハァハァ


261 :デフォルトの名無しさん:02/05/06 23:24
Mops 5.01が出たみたいです。

ftp://jamsoft.com.au/mike_hore/Mops/

age

262 :デフォルトの名無しさん:02/05/07 01:16
>>261
ダウソロードしたよ。
これでMac OS Xでも……(;´Д`)ハァハァ
とオモータんだけどEnterキーがきかねぇ。(怒
思わずcomp.lang.forth.macを覗いてみたら、
ウインドウをリサイズしてから他のアプリケーションを
フロントに持ってきて、も一度Mopsのウインドウを手前に
持ってくれば使える、とあった。(何のまじないだ?)
……ををコンパイルできる……けどInstallできねぇ(涙
スタンドアロンアプリを生成できないんですけど。
(これは何かの罰ですか?)

も少し待ちかなぁ……。





263 :デフォルトの名無しさん:02/05/07 23:15
>>262
おおすごい。
うちもEnterきかなくて目が点でした。
これからやってみます。


264 :デフォルトの名無しさん:02/05/08 00:15
Mops 5.01
アプリで表示させる日本語のタイトルやラベルが化けるんですが何か良い方法が
あるんでしょうか。

mops age

265 :デフォルトの名無しさん:02/05/08 00:21
comp.lang.forth.macにMops作者のMikeタンのシリアスな書き込みが…

http://groups.google.co.jp/groups?dq=&hl=ja&group=comp.lang.forth.mac&selm=newscache%24wmxpvg%24wsm%241%4

> The tough reality is that for Mops to continue, it really does need more effort than I can manage alone.
> The IDE is showing its age -- in particular it now needs an OSX-native text editor.
> Also the Manual is way out of date, and needs a major revision.
> I'll do it if people need it, but otherwise I'd rather not bother.
> I've got other things I could be doing.

こんなこというてはります。

> But I'd really like to know now whether there are still a significant
> number of users who aren't in a position to contribute,
> for whatever reason, or whether there just aren't very many users any more.

とも言ってるんで、Mopsの開発継続して欲しい連中はMikeタンに
フィードバックしてくだちい。
今すぐに!




266 :デフォルトの名無しさん:02/05/08 00:30
>>264
ほんとだ。文字化けする‥‥。
対策は………ワカンナイ、ゴメソ。


267 :デフォルトの名無しさん:02/05/08 02:31
>>265
とりあえずMikeタンにおてまみ出しときますた。


268 :デフォルトの名無しさん:02/05/11 00:26
以前Mopsを試したことがあるのですが、敷居が相当高い気がしました。
1.日本語のMops情報が限りなくゼロ
2.そもそもForth自体が超マイナー
3.本屋で日本語のForth本は手に入らない、今後も出る予定があるとは思えない。
4.結局ToolBoxの知識は必要になる。
5.したがってC言語の知識も必要になる。
6.日本語がインライン入力できない。解決するには結局ToolBoxどっぷりになる。
というつらい目にあうことになります。

最低限以下のようなページがないとつらい。
http://www.big.or.jp/~crane/cocoa/indexOnline.shtml

「Mopsはやっぱり!」

をだれかお願いします。(汗)





269 :デフォルトの名無しさん:02/05/11 07:16
Mopsを使ってる人間が言うのもアレなのですが、正直、
Mopsはあまり初心者向きではないんですよね……。
MPWがフリーになる前は、無料でToolBoxを駆使できる唯一の
開発環境だったのですが、MPWもフリーになり、デベツールが
OS Xに付属している現在ではあまりアドバンテージがない……。
しかも付属のライブラリにバグがあったりしてそれを回避したり
直したりしながらプログラムすることになります。(涙

……じゃあいったい誰が使っているのか?といえばモノ好きなオレとか……。
……オレとか……オレとか……。

…………。
…………。



ところでMopsの英文マニュアルは、内容が古くなってはいますが、
Forth&OOP入門の書としてイイです。
……………英語ですけど…………。



270 :デフォルトの名無しさん:02/05/16 17:23
openfirmware勉強CHU!

271 :デフォルトの名無しさん:02/05/16 19:06
そういや、comp.lang.forth.macの投稿記事の半分ぐらいが
OpenFirmware関係だったりするなぁ。
時代は変わった‥‥。

ググルでもみられるYO。
http://groups.google.co.jp/groups?hl=ja&group=comp.lang.forth.mac



272 :デフォルトの名無しさん:02/05/24 05:39
保守

273 :>222タン作 GokiForth:02/05/26 19:50
スレッド 安芸る

274 :デフォルトの名無しさん:02/05/26 23:37
>>273
あがってないよ。なんで?


275 :273:02/05/28 00:20
どうなってんだ?

276 :デフォルトの名無しさん:02/05/28 00:32
>>275
ちゃんとあがってるよ。
更新されてないだけでしょ。

277 :22:02/05/28 01:17
更新しますた。。。

‥‥いやネタじゃなく。ついでに移転しました。

GikoForth : http://gikoforth.s13.xrea.com/

実はxreaがめずらしく一般サイトの募集をやっていたので出来心でスペース
とっちまいました。

更新内容ですが、文字列と手続きブロックをオブジェクトでラップしてみました。

"逝ってよし" とか 【2を掛けて1を足す】とかは
それぞれ「文字列」「ブロック」クラスのオブジェクトをスタックに返します。

肝心のクラスライブラリの中身はスカスカに貧相ですが、カテゴリを使って
クラスを派生することなくメソッドを追加したり置き換えたりできるので、
とりあえずこの段階で公開しときます。

Cocoaネイティブ版を作りかけましたが、ヘタレなんで何年かかるかワカランです。
ちょとやる気が萎えますた。



278 :22:02/05/28 01:32
ちなみに「ブロック」クラスの中のifメソッド関係の定義を抜き出してみました。

:m ifTrue: ( b -- ) IF call: self THEN ;m
:m ifFalse: ( b -- ) not IF call: self THEN ;m
:m if: ( b ^blObj -- ) swap IF call: blockvec ELSE drop call: self THEN ;m

したがってブロックを使ったIF文モドキは今のところ以下のようになってます。

b true = :[ "True" ::print ]: :[ "False" ::print ]: ::if

trueやfalseがオブジェクトじゃないので、この順番でしか書けないんですよね。




279 :ムアー:02/05/29 12:51
XREAはもうs13までいってるのか。
ワシんとこはs8です。3ヶ月ぐらい前かな。
早ぇ。

280 :デフォルトの名無しさん:02/05/30 00:33
>>279
ムアーたんのサイトってどんなんだろ? (;´Д`)ハァハァ


97 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)