-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcparrydev.log
458 lines (351 loc) · 23 KB
/
cparrydev.log
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
20181016(Thu)
1. All.docによると、mlispのコードはlisp1.6に変換されるらしい
2. ERR(), SETERR()はLISP1.6で定義されていた
3. READDATA(はREADINC()の値が'COMMENTでない場合に、処理をしている。
INFには、左端にS式があり、~から右側がコメントになっているようにみえる。
ほかのデータでも、~がコメントになっているものがあった。
INFを読み込むのはREADINF()で、
READDATA()は、READINF()から呼ばれる。
SELECTINPUT()のあとREADDATA()を呼んでいるが、selectinput()が関係しているとは思えない。
READINC()の中では
INC(INCHAN,NIL)
I:=READ()
INC(NIL,NIL)
RETURN I
しかゃっていない。READが'COMMENTを返すのだろうか。
lisp1.6にもmlispでもREAD()はそんなことはしていない。
たんにS式を返すだけだ。
わからない。
20181014()
- READINFのやっていることがわからなくなってきた
INFにはTH2で、第三要素にformのある行があるが、readinfではそこは単にそのformに対してputpropしている。
lisp1.5ではlistに対するputpropができたのだろうか
- ファイルにランダムアクセスするコードがあったが、まったく読んでいない
20181020
@について... RDATAには@のついた式がいくつかある
@DEFPROPは、FUNCTIONかもしれない。
(SETQ SETLIST (GET @SETLIST @SETS))
これは変数についているのでQUOTEにみえる。
(SETQ WTS @(17 15 12 10 9 7 6 5 4 3 1))
これもまたquoteにみえる。あるいはlistかもしれない。
~ % RESPECTIVE WEIGHTS OF THE GIVEN FLARE CONCEPTS %
(SETQ WTS @(17 15 12 10 9 7 6 5 4 3 1))
~ %WEIGHTS ARE ASSIGNED TO CONCEPTS RATHER THAN TO INDIVIDUAL WORDS%
(SETQ FLARELIST (GET @FLARELIST @SETS))
(MAPCAR (FUNCTION (LAMBDA (WT) (PROG2 (PUTPROP (CAR FLARELIST) WT @WT)
(SETQ FLARELIST (CDR FLARELIST))
))) WTS)
この1行目は上と同じ。2行目の@WTもまたquoteに思える。
(putprop xxx 1 '1)などということはできないと思う・・・
こめんとによると、FLARELISTにはCONCEPTがならんでいて、WTは同じ数のwightらしい。
RDATAはOPAR3でのみ参照していて
EXPR OPARINITIALIZE ();
BEGIN
EVAL '(INC (INPUT (PAR BLF) RDATA) NIL);
WHILE NOT ATOM X ⇦ ERRSET(READ(),T) DO EVAL CAR X;
INC(NIL,T);
....
RDATAはデータとして読み込んで、EVALして使っているのだろうか。INC, INPUT、はわからない。lisp1.6かな
(PAR BLF)は変数なのか???
(PAR BLF)はa(DSKIN ..) の引数に使われている。が、DOR*の中は制御文字多発
バイナリファイルからのデータなのだろうか。
謎
20181022
RDATB やRDATAで、defpropがでてきて
(defprop A B C)
と書いていた。
すべてのAについて(defvar A)が必要になるので、macroでできないかやってみたが
(defmacro defprop (a b c)
(progn
(defvar ,a)
(setf (get ',a ',c) ,b)
)
)
だと、defvarしたaのスコープがprognの中になってしまい思ったようにならない。
defvarなしでメッセージでるけどいいのか??
別途, defvarを作ったらどうかと思ったら、rdataでは mapでdefpropをまわしていて,
そこから アトムをすべて集めるのがめんどう・・・
しかし、いずれにせよglobalなatomをどうにかする必要はでてくる。
データ中のアトムにputpropしているから・・・
動的束縛は楽だ・・・
20181024水
rdata.lispのインデントがおかしいので、手で修正した
また、グローバル変数 flarelistとpointersを*~*にしてdefvarした
これらの変数はatomとしてもでてきているので、この対処が間違っている可能性もありそう。
rdata1.lispとして修正版を作った
関数 -> 処理したatomのたまる変数
defprop -> *AOPUTPLIST*
putprop -> *AODEFPLIST*
readbel -> *INTLIST*
readinfはまだ対応していない。するとしたらλ名をとりこむのかな
(map (lambda (x) (print (symbol-plist x))))
みたいなことをすれば
プロパティの全貌がわかる
PDATBにでてくるatom->prop名->atomのグラフを作成した
Rのigraphを用いていてRスクリプトはparryplot.R
pdatb.graphは元のpdatbから()を取り除いた
pdatab.epsが作成したグラフ
これをみると、ほとんど重複がない。UNITとかINDの意味がよくわからない
20181025木
- pmem4.lispに日本語のコメントをいれていたら、Windowsで意味不明のエラーになってしまった。日本語をやめる
- files.csvの内容を絵にかいてみた。すこしは全体像がわかるかも。
- utils.lispは、cparryのatomのpropertyの関係を見えるようにするための道具。
defpropとputpropで定義したpropertyをigraphでなんとかみたい。
一方でinfはどうしようか。思案中
20181027土
- test.lispのexpectとvalueを別の行にした。みやすさ
- utils.lispは、propertylistによるグラフ構造をigraphで表示するための中間データ作成
- testxxx.lispをtest-xxx.lispに変更した
- git mvすべきだったが、mvしてしまった
* 変数名に*-*をつける必要はないようなきがする。今回つけた*はとくに・・・
- commonlispのルールみたいになっていたのでglobal変数に*-*をつけてはみたものの
たとえばSETLIST, FLARELIST, SENSITIVELISTは、
property listから取り出したデータをatomの値にしていると考えるべきだ。
だからこれらの変数には*をつけないことにしよう。
* 元のソースをベースに、commonlisp用に変更していくという方法
- 不要な関数をだみーにし、必要なものだけ変更していく・・・それでもうまくいくだろうか
悩み中
* RDATAにある~はコメントではなくnotのようだ。
しかもコメントの~もある。区別している文脈がわからない。やりなおしかも。くたびれた
そもそも
RDATA<-OPAR3/oparinitialize <- PMEM4/INITB <- PMEM4/INITFB <- DOR,DORS
となっていてDORはプログラムではない何かスクリプトの実行ログのようにみえる。
RDATAを参照する関数は、今のファイルにはないが、古いParryからもってきたコードだと
いうことなので、手で初期化するときに使っているというような話かもしれない。
RDATAの困った点
- ~はコメントなのか、notなのか?
- @はquoteなのか(これがあるから^Hを@@にするのはよくないかも)
- DELNSETの定義をみると、わけがわからない。
- STLの定義をmapcarしているのをみると, (cons @DEFPROP X)してevalしている。
- PDATB から(defprop a b c)のときproperty名はcになる。
さて。やはり~はコメントと考えるべきだと思う。
20181031水
1. RDATAを解読してみた。@がよくわからないが、quoteだと仮定した。
- マフィアに関する妄想がどのように生まれるかが定義されていた。
- キーとなる語を、FLARELIST, SETLIST, SENSITIVEにわけて、
各LISTのproperty SETS にはconceptと呼ばれる言葉のlistが定義され
各conceptの各言葉のproperty WORDS にはそのconceptに属する単語が登録されている
また、conceptのproperty WTにはその重みが登録されている。
- L65あたりからは、concept 〜SETの間で、最終的にMAFIASETにいたる遷移が定義されている。
property NEXTは遷移の次の状態を示す。
- とにかく重要なデータなので、RDATAを参照していないとは考えにくい。
これも移す。
2. property listで複雑な構造を作っているので、全体を見るためにt.lisp/showtree を作った。
(showtree <atom> '(words sets set) ())
というように使う。atomには'FLARELIST, 'SENSITIVELIST, 'SETLISTを想定。
words, sets, setは階層になってるproperty list
第三引数は作業用なので必ず()にする。
これをつかって、マフィア妄想の状態遷移をダンプするときはこうなる。
遷移図の矢印はproperty nextになっているので。
(showlist (get 'flarelist 'sets) '(next) Nil)
storyを全部表示するのはこう。無駄にlambda名が表示されたので、lambda名は表示しないようにするためpmem.lispを参照してしまった。
(showlist (mapcar (lambda (x) (car x)) stl) '(story) () )
3. SETLISTの値は、SETLIST.SETSと同じになっているが、FLARELISTとSENSITIVELISTはNIL。
重みをつけるときに消している。いいのだろうか。もともとそうだ。
4. INPUTQUE はassoc listになっている。
20181104日
1. LAPをもとに全関数の一覧をつくり、どの関数を作ったかのcsvを作った
2. 変数名の*-*を-にした。BELの*なまえがあるので区別
3. FRONT.LAPを読み直したが、INPUTQUESに追加する(cons x y)の値がスタックのかなたにあってよくわからない。
4. とにかくわかる関数からcommonlispに移していこうと思う。
5. pmem2.lispを機械的に書き直した。
これは、あとでデバッグできなくなるので、やりたくなかったけれど、作業をすすめるにはこれしかないかな。
対話型なのでtestもうまくかけない。かけるかな・・・
6. parryの変数名につけていた*-*をとつた。自分の変数には*-*をつけている
7. LAPmemo-j.txtを一部修正。FRONT.LAPをみて気づいたことを追加
ともかく、基本の関数がいろいろないので、完全な移植はむりだなあと思う。
20181105月
アセンブラコードPARFNS.FAI,PINDEXにREAD/WRITEなどの基本関数が定義されている。
これはLAPでなくPDP-10のアセンブラみたいだ
20181106火
1. returnに対応してletをprogに変更した
20181110土
1. pmem5.lispの関数を作り続けている
20181111日
1. pmem5.lispの関数は完了。ただし、error()を再定義しているところでえらー。
別のpackageにしてみる。
2. deleteも同様だった。padeleteに変更する
20181116金
1. mlispの関数はすべて書き換えた
2. chop.shで、特殊記号などをどう変換するかをまとめた
3. WINはまだやっていなかった。これはどうするか・・・
4. synnym()の定義がない。これは、(word word1 word2 ...)でどれかのword_iにヒットしたらwordを返すはず
各word, word_iのproperty SYNONYMにwordをいれておけば、高速になる。
このwordを同義語の標準形とよぼう。
5. INPUTQUESは、((word . word2)...) らしい。word2が入力された語で、wordはそれの標準形のはず。
標準形にはプロパティWORDS, SETが定義されている。
FRONT.LAPでINPUTQUESは作られているはず。
6. pmem5などには、SYNNYM.PARと書かれているが、これはSYNONM.PARのとことだと解釈
20181117土
1. make-infsでいろいろエラーになる
TH2のとき、putpropのところでatomでないリストのためにエラーになった。
(TH2 (DDHARM 3) ((MEASURE FEAR 14) DDOMINATING))
(when (atom i) (setf (get i (car a)) (cons (cadr a) (get i (car a))))))
にした。
listのときputpropしないのか。この例では、DDOMINATINGのTH2に設定しなくていいのか
20181118日
1. putpropが一箇所あったのをsetfに直した
2. readbelの中身がおかしかったのを整理した
3. test-*.shなどを実行してみた。pmem4.lispではmemqを使っていた。
4. 各test*.lispの中でloadして実行していたため、load時のメッセージとテストの
結果メッセージが混ざってわかりにくかった。
testall.lispでloadall.lispをしてから各test*.lispを実行するようにして
各test-*.lispではloadしないようにした。
そして、test-all.lispのテスト開始メッセージを追加した
parfns.faiにのsymnymの定義があり、そこでSYNONMを読み込んでいる。
20181124土
1. lispをmlispのコードと付き合わせて見直す。
2. とにかく、infixにすると、優先順位がわからなくなり、正確な動作がわかりにくい。
昔はfortranくらいしかなかったが、いまや、不思議な優先順位がいろいろあるので
混乱する。mlispのマニュアルをみろということだろうが。
mlispのような言語の問題かな。
interlispのclispは、機械的にinfixとprefixを変換するようになっていたが
(clispify, lispify)それも、ときどき間違って変換していたような気がする。
さらに、indentをどうつけるかが、人によって違っているようで、
意味がないとしか思えないindentで、制御構造を見誤る。
動かせる環境があればいいが、そうでない場合は困難を追加しているようなものだ。
3. elizaとparryの対話スクリプト(rfc439.txt)をgetし、そこからparryとelizaの発言のみ抜き出した。
テスト用(script/*)
20181125日
1. pmem2.lispまでチェックおわり
20190126土
(mtp)を作って、流れるところまで流しながら修正してみたけれど、ゴールが見えない。
どうすればいいのか
1. 入力データがどうなっているべきなのかがわかっていない
2. モデルに作用する関数のふるまいに、入出力や、なにか得体の知れないものが関係していて、動作確認どころではない。
pmem5.lispのテストをいくつか書いたけれど、全体での位置がいまいち分からない。
前に調べながら書いていた資料を観点を変えて作るべきか。
入出力とくにinputquesと(synonim . word)* がどのタイミングで更新されるのかは、誰が参照しているのかに関係してきて、ほんとうに分からない。
どうすればわかるようになるか。
モデルの操作だけに着目したいのだが、他のものがからんでくる・・・
分離していくしかないのかも。
入力関数に対して、どのようなテキストが適切であるかどうかもよくわかっていないかも。
Elizaのテキストを入力してみても、テキストはparseされているが、全部NILになる・・・
20190127日
(getline)を見直した。
formatをいれたときに、値を返さなくなっていた。
シノニムのpairリストを返すようにしてみた。
getlineが勝手に次の文を読み込んでいるのがよくないような気がする。
parryの反応は、その文を読み込んだ後に行うのだとすると、EOLでreactを呼ぶのか?
今は
inputquesは空のまま。これは、過去のすべてのsynonymリストがはいっているのではないのか??
ssentには、入力された行全体がはいっている。.はDOT、?は ?。
inputqは、まだ処理が終わっていないsynonymlistが入っている
(q ssent)はその文が質問文(Q)か叙述(D)かを返す
20190128月
mtp()ですこしずつ動かしてみている。
test_pattern.lapが何を返すのかがわからない。lapでいくぶん長い目のコード。
もうひとつ、入力の切れ目とreactのタイミング
今はうまく合っていない。
[TEST_PATTERN(front.lap)]
1. Windowを何度も呼んでいるが、そういう処理だっただろうか。
2. cparry/front.lispではlapをlispに書き換えている。
20190209土
0. 方針をかえて、モデルを操作する関数だけを使って、独自のエンジンを作ることにする。
入力の部分を分けて動かしてみよう。
1. utils.lispのshowlistでsensitivelistはエラーになる。理由はデータ構造が違うから。
3. pmem5.lispの下のほうからみてみた。reactでbreakする。
0) 引数のない関数について、動かしてみた。だいたい動く。
CLASSがINNであるatomはPで始まるもののみ。data/bel0。
関数(bl x)はxがatomでなければエラー。x.class=='innならntruth >=5ならT。
そうでなければx.truthの値を返す。
truthはいつ設定されるか? (setf (get x 'truth)..)の場所をgrepするとたくさんある。
1) reactのinputの1つめのパラメタstructが何か?
2) stypeはDかQ。ssentは入力された1文。
3) inputquesはわからない。getwordで作られる(sym . word)のリスト。
4) docnameなどでssentをさがしているのは、今inputした文からdoctorの名前をさがし
docnameに設定する。フラグdoc_name_flagをTにするとそうなる
5) INPUTNOはニュゥ力のぁった文の数。
inferenceでinputnoで割るので、ひとつも文を呼んでいない状態でinferenceを実行してはいけない。
6) setting.lispにdoc_name_flag =Tを追加した
20190210日
0. flarelist, sensitivelist, setlist などとpmem2.lisp, pmem4.lispの関数
1. (getword)をしたあと、(setf inputques inputq) をすれば
(lastword 'looks) => (looks)
文の中にでてくる、sensitivelistのwordsの標準系をまとめてその語の.SETに指定
complementがどこからでてくるのかわからない
good は読みとばす
'SPEC_CONCEPTは誰がきめる?
inputquesのlooksのwordsの同義語?? looksにする??
ちょっと意味不明
keywd, skeywd
(getword)とモデル更新をどうつなげるのか??
(mtp)で、(getword)のあとに、(setf inputques inputq)を追加してみたが、breakする。
2. 使う文では、list -> set -> wordsの語を使うとどう変わるのかをみればよさそう
3. struc が何か・・・
20190211月
1. struc.UNITを参照していたのでgrepしてみた。
(specfn sturc) だが、
struc.unitをnameにして、nameが go_on, elab, who, whatなら(eval (list name nil t))している。
pdatb.lispで、ラムダ名のいくつかにunitが定義されている。
pdatb.lisp:(DEFPROP REASON @@0030 UNIT)
pdatb.lisp:(DEFPROP MANNER @@0031 UNIT)
pdatb.lisp:(DEFPROP @@0010 GO_ON UNIT)
pdatb.lisp:(DEFPROP @@0020 HOW_KNOW UNIT)
pdatb.lisp:(DEFPROP @@0021 ELAB UNIT)
pdatb.lisp:(DEFPROP @@0030 WHY UNIT)
pdatb.lisp:(DEFPROP @@0031 HOW UNIT)
pdatb.lisp:(DEFPROP @@0032 WHERE UNIT)
pdatb.lisp:(DEFPROP @@0033 WHEN UNIT)
pdatb.lisp:(DEFPROP @@0034 HOW_LONG UNIT)
pdatb.lisp:(DEFPROP @@0035 WHO UNIT)
pdatb.lisp:(DEFPROP @@0036 WHAT UNIT)
pdatb.lisp:(DEFPROP @@0037 YOU_DO UNIT)
pdatb.lisp:(DEFPROP @@0038 THEY_DO UNIT)
pdatb.lisp:(DEFPROP @@0040 HOW_MUCH UNIT)
2. 定義されていないatomでエラーになると困るから、errsetで囲んでいるのかな。
commonlisp でそういうことをする関数がわからない。breakパッケージみたいなのか??
3. strucは文の先頭の文字のように見えるが、I kill a cat.でbreak.
20190216土
ここ数日、Parryの話す部分についてみていた。
たぶん replyrがそれをしている。
・pmem.lispなどの先頭にあるglobalvariablesのリスト
- anaphoraは代名詞のような感じだが
- andthenが対話のデータを保存しているようだ
!CLISTがconversation listの先頭で!clastが最後の要素ということだがconversation list自体は名前がないのか?
まあ!ClLISTがそれだけど・・・
ちなみに、コードでは ?!CLISTと書かれている。この先頭の?は何だろうか。?!だったり!だったりよくある。
同じ変数なのか??? ★ こういう変数がたくさんある★
ANDTHENというのがついている変数はやりとりのデータぽい
要素は(IN|OUT . なにか)という形をしていて、INはParryが聞いた言葉、OUTはParryが言った言葉を示している。
!LAST_ANDTHEN は最後に処理した(in/out . 文章?)になる。
!OUTPUTにParryの発言がはいる
!LAST_OUTPUTにはOUTPUTの最後の^H名がはいると書かれている。
発言にそれぞれ^H名(@@名, lambda名)がつけられるのか??
inputquesは、(同義語 . 入力語)* というだけでなく(canonical 5-letter atom . input word)ということなので
5文字になっている。
semantic unitとは何を意味するか??
!ERRORにエラーのリストがあるらしいのだが、このエラーとはどのエラーのことか??
・変数名に、?!がついたのと!だけついたのと何も付いていないのがあって、?!や!を除くと同じ名前のもの・・
mlispで!はset、?は参照なんていう意味があるのだろうか。
たぶん同じ変数だと思うがよくわからない。
* (diskread)で(lookup)している中で、語のインデックスを求めて、そのインデックスでファイルアクセスに行くところがある。
関連しそうなファイル。*.parはインデックス計算に使い、*.selにS-expが格納されているような気がする。
*.par *.sel
cpats.par cpats.sel
spats.par spats.sel
synonm.par synonm.alf
synonm.parをみると、synonm.alfのcarとまったく同じでなく、先頭5文字になっている。
しかし、このparからalfのインデックスがわかるような気はしない。parに数字はないし・・・
parのところどころに制御コードがはいっているので計算できるのだろうか
spats.parを見ると、制御コードのところは元の文字と同じ数だけあるような気もする。
parでは、selのcarの先頭5文字しか使っていないし、同じ名前がくることがある。たとえばADDとか。
INも大量にある。(IN YOU ...)というリストだったりするので、1語ずつツリーにしているとか・・・
木構造になっていて、たどっていくのかも・・・そのときselでのindexはどう計算すればよいか?
selについては、car => cdrというhash-tableにしておけばよさそう。
固定長のファイルを読み込む場合、メモリに余裕があるはずなので、ストレージを使う必要がないはず。
とりあえずそのほうが単純になるから・・・
*.alfは他に次のものがあるが、synonm以外はparはない。
flags.alf
idiom.alf
irreg.alf
startr.alf
stoppr.alf
suffix.alf
synonm.alf
データファイルとしては、*.patが以下のようなものがある。
famly.pat
filler.pat
negate.pat
same.pat
ファイル全体については filelist-sj.csv