/
SAMPLES.txt
284 lines (194 loc) · 12.7 KB
/
SAMPLES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
Paraphrase sample programs' README (ver.0.97) by K.Iigura
以下、../para という記述がありますが、Windows の場合は ..\para と読み替えて下さ
い(\ は円マークを表します)。
samples ディレクトリにある各ファイルは、samples ディレクトリに移動後
../para サンプルプログラムファイル名
として実行して下さい(例: ../para 99.p8e run など)。
-----
99.p8e
いわゆる九九を表示します。
実行方法: ../para 99.p8e run
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
aop.p8e
アスペクト指向プログラミングの例を示すものです。
samples ディレクトリにて ../para などとして Paraphrase インタプリタを起動し、
"aop.p8e" load
とし、aop.p8e を読み込みます。
次にワード hello を実行すると、様々な情報が表示されます。しかし、hello の実体は
"hello" : "HELLO" .cr ;
です。つまり HELLO という表示以外はウィーブされたアドバイスによりなされている
ものであり、その実体は myDocol ワードです。詳しくは aop.p8e の中身を御覧ください。
attr.p8e
ワードの属性に関するサンプルプログラムです。
本サンプルプログラムでは、ワード twice に test-code という属性を与え、
その属性の値として当該ワードのユニットテストプログラム(文字列)を格納します。
ワード test では、その属性値を用いてユニットテストを実施します。
caller.p8e
呼び出したワードをスタックに積むワード caller のサンプルプログラムです。
使い方を示しているので、ファイルの中身を御覧ください。
check-scriptFile-args.p8e
samples ディレクトリにて
../para -E "1 2.3 'str' ( a ( b c ) )" check-scriptFile-args.p8e
とすると、オプション E で指定された文字列を評価した上で、check-scrptFile-args.p8e
が読み込まれて実行されます。check-scriptFile-args.p8e は、スタックの様子を show
するスクリプトですので、上記のように入力すると、引数がスタックに積まれている様子を
確認できます。
Paraphrase は Forth 系なので、引数は実行されるスクリプトファイルよりも前に配置さ
れる方が自然です。しかし、一般的には引数はプログラムファイルの後に配置されます。
E オプションは、スクリプトファイルの後に記述しても、指定されたスクリプトファイル
よりも前に評価されますので、
../para check-scriptFile-args.p8e -E "1 2.3 'str' ( a ( b c ) )"
と書くこともできます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
countPrimeMT-short.p8e
1 から 1,000 万までの素数を並列処理を用いて数えるプログラムです。samples ディ
レクトリにて、
../para countPrimeMT-short.p8e run
とすると、計算か開始され
numOfPrime=664579 (2 ... 9999991)
という出力が得られます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
dumpMPmt.p8e
samples ディレクトリにて、
../para dumpMPmt.p8e run
とすると、1 から 5000 までのメルセンヌ数のうち素数であるものを求めます。printf
などの使い方の参考にして下さい。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
dynamic-scoping.p8e
Paraphrase は、変数については動的スコープを採用しています。
その動作の様子を示すサンプルプログラムです。
fact-tr.p8e
ver. 0.93.0 より導入された末尾再帰(tail recursion)における最適化を示すプログ
ラムです。詳細については、samples ディレクトリにて
../para fact-tr.p8e
としてみて下さい(引数に run と与えれば 100 の階乗を末尾再帰を使って求めます)。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
failure.p8e
終了コード -1 を返し、呼び出し側に必ず失敗を報告するプログラム例です。
fastInvSqrt.p8e
型情報を差し替えるサンプルプログラムです。
このプログラムでは、高速に逆数を平方根を計算します。
FizzBuzz.p8e
いわゆる FizzBuzz 問題を処理するワード FizzBuzz を定義します。
samples ディレクトリにて、
../para FizzBuzz.p8e 1 10 for+ i FizzBuzz . next cr
とすると、
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz
という出力が得られます。
../para FizzBuzz.p8e run とすると 1 から 19 までの数値に対して処理が行われます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
isPrime.p8e
他のサンプルプログラムで利用されるワードが格納されています。
順次割り算を行うことにより、与えられた値が素数であるか否かを判定するワード prime? が
定義されています。
join.p8e
ワード join を使ったサンプルです。
並列処理の完了を待って、計算結果の集計を行います。
lisp(ディレクトリ)
Paraphrase で実装した Lisp - lis.p8e 関連ファイルが格納されています。
lis.p8e は Pter Morvig さんの Lispy を Paraphrase で記述したものです
(オリジナルは Python で書かれています)。
Lisp として動かすには samples/lisp ディレクトリにて
../../para lis.p8e repl
として下さい。Read Eval Print Loop が開始し、対話モードになります。
終了は Ctrl-D (Windows の場合は Ctrl-Z)を入力して下さい。
test-lis.p8e は lis.p8e のテストプログラムです。
../../para test-lis.p8e
として実行し、lis.p8e が正常に動作していれば、最終行に
=== all tests are passed. ===
と表示されます。
Mersenne.p8e
メルセンヌ数の素数性を判定します。詳細は
../para Mersenne.p8e help
として、表示される使用方法を御覧ください。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
mabdelbrot.p8e
マンデルブロ集合をターミナルに出力します。名前が mabdelbrot となっているのは、
元とした Dmitry Stogov さんのプロジェクトに倣っているからです
mabdelbrotMT.p8e
mabdelbrot.p8e のマルチスレッド版です。mabdelbrot.p8e はシングルスレッドでの
実行でしたが、こちらはマルチスレッドで高速に計算します。
paradocs(ディレクトリ)
Paradocs は、Paraphrase で記述された、索引付きのドキュメントを作成する
シングルソースマルチユースなドキュメントシステムです。
まだ、プログラムもサンプルとして同梱されている Paraphrase のワードリファレンスも
未完成です。詳細については paradocs/README.txt を御覧ください。
pass.p8e
正常に終了したことを伝えるサンプルプログラムです。
PE10mt.p8e
200 万以下の全ての素数の和を求めて表示します。詳しくは
../para PE10mt.p8e help
として、表示される使用方法を御覧ください。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
PE21mt.p8e
2 から指定された数までの友愛数の和を並列処理にて求めます。samples ディレクト
リにおいて、
../para PE21mt.p8e 10000 run
などとします。この例では 2 から 10,000 までの友愛数とその総和を求めるという
意味です。例えば、1000 を指定した場合は、220 と 284 という 1000 以下の友愛数が
表示されるとともに、その合計である 504 という値が表示されます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
PE25.p8e
Project Euler No.25 を解く、PE25 というワードが定義されています。このワードは、
1, 1 から始まるフィボナッチ数列に対し、TOS にある桁数を超える最初のフィボナッ
チ数列の項数を表示するものです。Project Euler No.25 では、1000 桁を超える最初
の項数を表示せよ、というのが問題ですので、samples ディレクトリにて
../para PE25.p8e 1000 PE25 .cr
とし、解くことができます(4782 と表示されるはずです)。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
PE56.p8e
Project Euler No.56 を解くサンプルプログラムです。Project Euler No.56 は、
0<a,b<100 において a^b を 10 進数で表示したとき、各桁を表す数字の和のうち最大
となるものを示せ - というものです。
../para PE56.p8e run
にて計算できます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
PolishNotation.p8e
Lisp のような前置記法を Paraphrase で行うサンプルプログラムです。
ワード :( と ); を用いて実現します(注:これらはアスキーアート
ではありません)。
使用方法についてはファイルの中身を御覧ください。
正しく動作することを確認するには、
../para PolishNotation.p8e test
として下さい(GOOD と表示されれば正しく動作しています)。
pseudo_shebang.bat
Windows にて Unix 系 OS の shebang を実現するサンプルプログラムです。
詳細は後述していますので、そちらも御覧ください。
shebang_example
Linux や MacOS にて shebang を用いて Paraphrase を実行するサンプルプログラムです。
test.bat
Windows 用のテストプログラムです。
Linux や MacOS では make を使って make test としてテストプログラムが実行されますが、
Windows は Visual Studio のビルドシステムを使っているため、別途このようなテスト用の
バッチファイルを用意しています。
user-defined-deprecated.p8e
Paraphrase では AOP を用いて、実行時に警告の表示等が簡単にできる仕組みを有しています。
このファイルはそれを示したサンプルプログラムです。
zdk.p8e
いわゆるズンドコキヨシ問題を処理するワード zdk が定義されています。samples ディ
レクトリにて
../para zdk.p8e run
とすると、ズンドコキヨシ問題を処理する様子が表示されます。
※ 本サンプルプログラムの動作は make test または test.bat でも実行の確認ができます。
zdk2.p8e
相互参照ワードの記述例です。
上記のズンドコキヨシの処理を相互参照ワードにて実装しています。
-----
次のサンプルファイルは Windows で実行する場合に関係するファイルです。
pseudo_shebang.bat
Unix 系の OS - 例えば Linux や MacOS では、シェルスクリプトの冒頭に
#!../para
と書き、それ以降に Paraphrase のプログラムを書いていけば、
1) まず 1 行目に書いてある ../para が実行され、
2) 2 行目以降に書かれているものは、1 行目により起動された para に入力され
てゆきます。
この仕組を shebang というそうです。Windows でも、このような仕組みで para へプ
ログラムを読み込ませる例として、このバッチファイルは提供されています。
このバッチファイルは、para を起動し、かつ、バッチファイル内に FizzBuzz プログ
ラムが記述されています。本バッチファイルを起動すると、記述されている FizzBuzz
プログラムが実行され、その結果を表示します。
---
次のサンプルファイルは Linux や macOS にて実行する場合に関係するファイルです。
shebang_example
実行可能なスクリプトファイルを作成する例です。
Windows 版の pseudo_shebang.bat に相当するものです。