私は完全にlispプログラミングの新人です。私は、xmlドキュメントから単語を読み込むクラスのプログラムを書く必要があります。とにかく、私は配列(ワード)とファイルストリーム(in)をとるこの関数を書いています。収集された各文字を単語に追加しながら、ストリームの#スペースに達するまでループします。私はその言葉を返すことを望む。私は間違ったことをしていると確信していますが、ここに私が持っている方法があります。私は、最後にリターン機能は完全に場違いであることをかなり確信している:リスプで返す値を指定する
(defun get-string (in word)
(loop for char = (read-char in nil)
while (not (char= char #\space))
do(vector-push-extend char word))
(return word))
は今、私は葯の問題があります。ループはスペースを見つけた後に文字を探し続け、私はたくさんのnilsを取得します。また、私は改行を止める必要がありますが、どうすればよいか分かりません。私はこれを結んだが、それはすべての文字を読み込むだけです。
(defun get-string (in word)
(loop for char = (read-char in nil)
while (not (or (char= char #\space)
(char= char #\newline)))
do(print char))
word)
私はデバッガをよく理解していないし、私が読んでいる文字を見たいので、印刷文字がそこにあります。
私はあなたが何を意味しているのか分かりませんが、ファイルから単語を読み込んでいるのでストリームを渡しています。この関数の前に、別の文字を使って<>で囲まれたテキストをスキップしてから、ストリームをget-word関数に渡します。これはxmlタグの間で文字列を引っ張ります。 – webhound
閉鎖は良いアイデアですか?異なるストリームからの読み込みはどうですか?スレッドの安全性?また、LETはDEFUNがトップレベルの構造であるのを防ぎます。 –
@RainerJoswig:うまく機能しているプログラムからコードをコピーしました。しかし、問題が発生するケースが多すぎることは間違いありませんので、私は編集でそれを置き換えます。 –