さくらんぼのlambda日記

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

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

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についてのみ考えます。とりあえず、外部のプログラムを実…

Lispで文字列処理その3

意外と長持ちしそうなこの企画いつまで続くのか。それでは早速。

ちょっと脱線

RubyでSVM(Support Vector Machine)を触りたくなった。 ちょっと調べてみるとどうやらlibsvmが使えるらしい。http://www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/ここの手順通りに実行すれば動くらしいです。libsvmをインストール sudo …

大文字と小文字の入れ替え

こんなのもあるのですね。Ruby凄いというほかないwLispの標準関数ではないので自作しないといけないですね。使えそうな道具としては文字が大文字か小文字か判定するuppper-case-p、lower-case-pという関数があります。 (upper-case-p #\A) ==> T (upper-case…

大文字・小文字に揃える

これは標準の関数で可能ですね。 (string-upcase "hoge") "HOGE" (string-downcase "HOGE") "hoge" キーワード引数で開始地点と終了地点を指定することもできます。 (string-upcase "hoge" :start 1) "hOGE" (string-upcase "hoge" :start 0 :end 1) "HOge"

Lispで文字列処理その2

しばらくは、前回の日記の続きをやっていこうと思います。

文字列繰り返し

いきなり困った!デフォじゃなさそう http://rosettacode.org/wiki/Repeating_a_string#Common_Lispここのを利用します。 (defun repeat-string (n string) (with-output-to-string (stream) (loop repeat n do (write-string string stream)))) (princ (repe…

文字列を連結する

文字列の連結はconcatenateが使えます。 (concatenate 'string "hoge" "fuga") "hogefuga"

Common Lispで文字列処理

ちょっと自分でプログラム書く場面で一々Hyperspecとかgoogle先生に聞くのが嫌になってきたので、Lispの文字列処理についてまとめていこうと思います。何が必要かっていうのの参考になりそうなものとして多言語の逆引き辞典的なものが参考になると思ってRuby…

Memo

hunchentootの簡単なサンプル。 あとで解説が付く予定。 (asdf:oos 'asdf:load-op 'hunchentoot) (asdf:oos 'asdf:load-op 'cl-who) (require :hunchentoot) (require :cl-who) (setq *server* (hunchentoot:start (make-instance 'hunchentoot:acceptor :po…

genericsが分かってなかった話

C++のtemplateとJavaのgenericsは大分違う。 templateはexpansionで解釈される。genericsはErasureで解釈される templateでは引数として定数値を与えることができる、genericsでは出来ない genericsではList> とか書ける templateは型別にバイナリを生成する…