さくらんぼのlambda日記

lambdaちっくなことからゲーム開発までいろいろ書きます。

2010-01-01から1年間の記事一覧

"次"の文字列を取得する

これは前回つかったchar-codeとcode-charという文字コードから文字を生成する関数を利用すればできそうですね。 (code-char (char-code #\a)) #\a うん。 #\aから数字にして、数字から文字に変換できているようですね。 (code-char (+ 1 (char-code #\a))) #…

Lispで文字列! その2!

今日も昨日の続きです。 残件はー。 文字列を中央寄せ・左詰・右詰する "次"の文字列を取得する 文字列を暗号化する 文字列中で指定したパターンにマッチする部分を置換する 文字列中に含まれている任意文字列の位置を求める 文字列の末端の改行を削除する …

でも無理だっ

終わると思ったんですけど。もうちょっとだけ続きそうです。残るは 文字列を中央寄せ・左詰・右詰する "次"の文字列を取得する 文字列を暗号化する 文字列中で指定したパターンにマッチする部分を置換する 文字列中に含まれている任意文字列の位置を求める …

文字列を浮動小数点に変換する

ちょっと順番が前後してしまいましたが、今度は小数などを読み込む方法です。 read-from-stringを使えばらくちんです。 (read-from-string "10.0") 10.0 4 (read-from-string "1/2") 1/2 3 ちなみにread-from-stringはLispのリテラルを理解できるので複素数…

ASCII文字をコード値に(コード値をASCII文字に)変換する

これはchar-codeを使えば実現できます。Lispだと文字の表現が普通の言語と違う(#\をつける)ところだけ注意が必要でしょうか。 (char-code #\A) 65

8進文字列を整数に変換する && 16進文字列を整数に変換する

Lispだとこれらの変換は一纏めで処理できるのでまとめてしまいます。 (parse-integer "11" :radix 2) 3 2 (parse-integer "77" :radix 8) 63 2 (parse-integer "99" :radix 10) 99 2 (parse-integer "FF" :radix 16) 255 2 (parse-integer "FFF" :radix 16) …

文字列の先頭と末尾の空白文字を削除する

これはそのものずばりtrimを使えばできます。先頭とか末尾を指定する場合には、string-left-trimやstring-right-trimを使うことが出来ます。 ただ、Common Lispのtrimは他の処理系(Ruby、PHPなど)と違って空白文字に相当するものを引数で指定するようです。…

文字列を1行ずつ処理する

これはread-lineを使えば簡単に実現できます。with-input-from-stringで文字列をストリームにしてから処理という感じですね。 (with-input-from-string (in "foo bar baz") (do ((line (read-line in nil) (read-line in nil))) ((null line)) (print line))…

文字列を1文字ずつ処理する

これは実はすでに使っていますね。mapを使えば実現できます。 (map 'string #'(lambda (x) (princ x)) "hogehoge") hogehoge "hogehoge" こんな感じで出来ます。

Lispで文字列処理まとめて!

いい加減おしまいにしたくなってきたので、文字列関連を一気に処理してしまおうと思います。 ただ、 文字列中の式を評価し値を展開する だけは難しそうなので後日やります。

cl-ppcreって

知らなかったのですが、独自の記述方法で正規表現を記述できるのですね。 http://weitz.de/cl-ppcre/#create-scanner2 このツリーをパースしてスキャナを作ってくれる関数の説明にその詳細が書いてあります。この方式で書くと階層構造を持った状態で正規表現…

Lispで正規表現!

いい加減疲れた!正規表現つかうのがいいよ!最近はclbuildで管理しているので、下のコマンドでcl-ppcreをインストールしました。 ./clbuild install cl-ppcre これだけでOK!使うときは適宜 (require 'cl-ppcre) で使えます! 前回の課題にあった文字列置換…

部分文字列を置き換える

replaceだと何が駄目かというと、掲題のRubyの例ですと s = "Apple Banana Orange" s[0..4] = "Vine" #=> s = "Vine Banana Orane" s[5, 6] = "Lemon" #=> s = "Vine Lemon Orange" のようになっています。 これは、指定した範囲を引数の文字列で置き換える…

Lispで文字列処理その11

ぐぬぬ。

部分文字列を取り出す

これは簡単ですね。stringはsequenceなのでsequence用の関数subseqを使えば出来ます。 (subseq "hoge" 2 3) "g" (subseq "hoge" 1 4) "oge" こんな感じ。簡単ですね。というか最近の課題に比べると楽すぎて泣けてきましたw

Lispで文字列処理その10

さて、今日はそろそろいい加減別の課題に移りますよ!!

Lispで環境変数を取得する

まずはこれから片付けるよ! なんかThe Common Lisp Cookbookにそのものずばりがありました。 http://cl-cookbook.sourceforge.net/os.html *1264146917* (defun my-getenv (name &optional default) #+CMU (let ((x (assoc name ext:*environment-list* :tes…

Lispで文字列処理その9

昨日ので若干気にいらない点があったのでちょっと調べてみた。

複数行のコマンドの実行結果を文字列に設定する

これですが、とりあえず深く考えないで実装してみることにします。 前回までと同様リードマクロを使えば出来そうですよね。まずは、前回までで分かっている道具をちゃんと関数にしておきます。外部プログラムを実行し、その結果を文字列として返す関数を定義…

Lispで文字列処理その8

うわーん。 途切れちゃった。仕事のせいにしておきます。 すいません。頑張ります。

複数行のコマンドの実行結果を文字列に設定する

今日の課題はこれですね。

Lispで文字列処理その7

今日もがんばって更新したいです。

ヒアドキュメントの終端文字列をインデントする

次の課題はこれです。前の課題のマクロを修正すれば簡単に対応できそうですね。 (defun |#@-reader| (stream sub-char numarg) (declare (ignore sub-car numarg)) (let (chars) (do ((curr (read-char stream) (read-char stream))) ((char= #\newline curr…

複数行の文字列を作成する

そろそろこの題目から抜けだしたかったのですが どうやら前回の修正でも駄目らしいですorzヒアドキュメントを正確に実装するならば 終端を示す文字列は 行頭にある その行はその終端を表す文字列のみである という条件を満たす必要があるらしいです。確かにR…

Lispで文字列処理その5

なんか前回の回答が@lapis_moon先生にダメ出しされてしまいました。http://twitter.com/lapis_moon/status/7819655300 @lambda_sakura ヒアドキュメント的に、最後の改行ってどうなのかしら? 最後に出てくる例でいうと、「string"」ってふうに改行なしで終…

複数行の文字列を作成する

さて宿題にした複数行の文字列を作成するという課題です。 "first line second line third line " "first line second line third line " このように複数行の文字を「"」でくくってしまえば問題なく動作します。だけどそれだと逆引きRubyの示唆しているヒア…

Lispで文字列処理その4

この作業非常に勉強になるので続けていきたいところ。それでは。

なんか見つけてしまった。

http://www42.atwiki.jp/elisp/pages/12.html#id_2234e1d5でもEmacs Lispだから関係無い!でも既に答え作っているもので別解があったりするので 勉強にはなる。複数回繰り返しの文字列なんかは こっちでも良いかもしれない。 loopマクロ使わない分遅いかもし…

複数行の文字列を作成する

次も難しすぎワロタwww これは宿題ってことでwww

コマンドの実行結果を文字列に設定する

ちょwまた難しいことをおっしゃる。とりあえず、プロセスであるとかOSが絡む話はCommon Lispでは規定されていないので、各Common Lispの実装依存になってしまいます。ここでは自分の利用しているSBCLについてのみ考えます。とりあえず、外部のプログラムを実…