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]