Have unlimited dreams. I hava a scheme.
concatenate line
2003/02/28
LispMe(Palm)で空行行区切のレコードを扱う。 単語確認の出題をランダムにする計画。
一度すべてを(変数に)読みこみ。
lispmeでしか動かない。
(define (get-rec) (define (get-rec-in n) (let ((rec (dm-read-rec (dm-open-db "MemoDB" 0) n))) (if (string=? (substring rec 0 9) "vocrandom") rec (get-rec-in (+ n 1))))) (get-rec-in 0))
メモ帳のデータベースを読み、タイトルが、vocrandomで始まっているメモを探して いる。open-input-fileでは、タイトルを指定して読み込む事ができるため、こちらの 方が良いかも知れない。
参考 なんでも再帰の消えるループ
この後、空行毎にインディクスを振ったリストを作成する。
2003/03/01
open-input-fileを使う。
(define (get-rec) (define inport (open-input-file "vocrandom")) (define (get-str-in str) (let ((c (read-char inport))) (if (eof-object? c) str (get-str-in (string-append str (list->string (list c))))))) (get-str-in ""))
string がlispmeにはない。(list->string (list char))
read-lineがlispmeにもgaucheにもあるが使用していない。
(string-append str (list->string (list c)))がlispme(palm)では遅いようだ。 lispmeでは空行区切りのファイルを読まず、readでSchemeオブジェクトの外部表現 (S式?)を読み込む事にする。Schemeオブジェクトの外部表現は、gaucheで作る事にする 。
2003/03/05
ファイル名は、"random"固定。空行区切のレコードを要素に持つベクタを作成する 。リストでも良いが、リストよりメモリ使用量が少ない。
; l2v line to vector (define dic "random") (define (makelist inport) (define (makelist-in l) (let ((line (read-line inport))) (if (eof-object? line) (if (= 0 (length l)) #f l) (if (string=? line "" ) (if (= (length l) 0 ) (makelist-in l) l) (makelist-in (append l (list line)))) ))) (makelist-in (list )))
ポートから1行毎に読み込み、空行までの各行を要素とするリストを返す。 ファイルの終了になると、#fを返す。
(define (l2v) (define inport (open-input-file dic)) (define (l2v-in ll) (let ((l (makelist inport))) (if l (l2v-in (append ll (list l))) ll))) (let ((ll (l2v-in (list)))) (close-input-port inport) (write (list->vector ll))))
makelistの各リストを連結し、最後にベクタに変換して、外部表現で出力する。
失敗:(write l)ではなく、(display l)を使用したため、外部表現にならなかった 。
失敗: (append l line)でリストではなく、文字列を作成した。(append l (list line))とした。(consとreverseの方が良いかも。)
空行区切りのファイル(random)を作り、gaucheで処理する。処理したテキストを docファイルに変換して、palmに転送する。
$gosh -b -l ./l2v.scm -El2v -Eexit > word.txt $txt2pdoc word.txt word.txt word.pdb $pilot-xfer -i word.pdbpalmで読み込み
2003/03/07:ベクタのテキストを読み込む。
(define wv (read (open-input-file "word.txt" 2)))lispme独自(open-input-file string [type]):typeにdocを指定している。
palmで出題
乱数でランダムにベクタの要素を選び、 先頭行を当てる問題(2行目以降)を表示する。 画面クリックで、答(と全リスト)を表示します。
(define (qa) (let (( l (vector-ref wv (random (vector-length wv))))) (display (cdr l)) (newline) (event 1) (display (car l)) (newline) (write l) #f))lispme独自(random int) (event wait)
wvとqaを定義した後で、(qa)を実行(eval)する。 [eval]をクリックする事により、連続して表示(出題)される。 出題/回答の表示がいま一つ。
一度の実行(eval)で連続して、表示するのは、面倒。ouput領域が足りなくなる/ 潰れる。outputを使用しない(でグラフィック使用する)と面倒。
辞書引
ベクタではなく、リストにすると、 alist("association list" = 連想リスト)として利用でき、 簡単な辞書になる。
(以前、メモを調べる辞書モドキを作成したが、遅くて使えなかった。 asscでは、実用になりそう)
(assoc "same" (vector->list wv))
無保証
motto: みんなに感謝,あなたに感謝 (next:為に生きる Rev.S.M.ムーン)
I am grateful to everyone and you.
mizotec@nifty.com [up]