Lisp
mod,rem,floor,truncateが使える! C言語とちがって余りは正剰余と負剰余の両方が選べます。 正剰余 負剰余 余り mod rem 商と余り floor truncate (mod 5 2) 1 (rem 5 2) 1 (mod -1 3) 2 CL-USER> (rem -1 3) -1 (floor 5 2) 2 1 (truncate 5 2) 2 1 (floor…
はい。これはldb関数を使えば良いですね。 ; ldbは第一引数にしたがってデータを読みます ; 単位はbit ; s : size ; p : position (ldb (byte s p) target) ; 4bit左に移動して1bit読む (ldb (byte 1 4) #b10000) =>1
formatの~Rには以下の機能もあるみたいです パラメータを1つも指定しなかったときは,修飾子の指定により以下の動作をする. * 修飾子なし: 整数を英語の綴り(基数)で出力. * ‘ : ’ 修飾子のみ: 整数を英語の綴り(序数)で出力. * ‘ @ ’ 修飾子のみ:…
GW中なのにも関わらず更新できてない! 腹を切って死ぬべきです。さて掲題の課題ですがformat関数を使えば簡単に実現できそうですね。 ところでformat関数はオプションが多すぎてさっぱり分からないです。 http://super.para.media.kyoto-u.ac.jp/~tasuku/fo…
はい。これは結構簡単だと思われます。 #b10000 ;=> 16 #o20 ;=> 16 #x10 ;=> 16 #16R10 ;=> 16 #XA1 ;=> 161 これ以外にもLispは36進数まで表現できますw #36Rzz ;=> 1295 ね。簡単でしょ?
やっと環境も整備できてきたのでそろそろ再開ですよ!http://www.namaraii.com/rubytips/?%BF%F4%C3%CD 次は数値をやろうかと思います。
文字を寄せる方法を簡単にですが実装してみました。 (defun make-string-lefted (count target) (let((space-num (- count (length target)))) (concatenate 'string target (make-string space-num :initial-element #\Space)))) (defun make-string-righte…
どういう処理系を使っているかにもよりますが、最近の処理系ですと問題無くカウントできる気がします。 (length "あああ") 3
これも正規表現ライブラリcl-ppcreを使えばラクチン!
どういう処理系を使って(以下略 (setq *my-strings* "あいうえお") "あいうえお" (subseq *my-strings* 0 (- (length *my-strings*) 1)) "あいうえ"
これは正規表現ライブラリcl-ppcreを紹介するときに紹介しましたね。ここでは省略してしまいまーす。
これは前回つかったchar-codeとcode-charという文字コードから文字を生成する関数を利用すればできそうですね。 (code-char (char-code #\a)) #\a うん。 #\aから数字にして、数字から文字に変換できているようですね。 (code-char (+ 1 (char-code #\a))) #…
今日も昨日の続きです。 残件はー。 文字列を中央寄せ・左詰・右詰する "次"の文字列を取得する 文字列を暗号化する 文字列中で指定したパターンにマッチする部分を置換する 文字列中に含まれている任意文字列の位置を求める 文字列の末端の改行を削除する …
ちょっと順番が前後してしまいましたが、今度は小数などを読み込む方法です。 read-from-stringを使えばらくちんです。 (read-from-string "10.0") 10.0 4 (read-from-string "1/2") 1/2 3 ちなみにread-from-stringはLispのリテラルを理解できるので複素数…
これはchar-codeを使えば実現できます。Lispだと文字の表現が普通の言語と違う(#\をつける)ところだけ注意が必要でしょうか。 (char-code #\A) 65
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など)と違って空白文字に相当するものを引数で指定するようです。…
これは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))…
これは実はすでに使っていますね。mapを使えば実現できます。 (map 'string #'(lambda (x) (princ x)) "hogehoge") hogehoge "hogehoge" こんな感じで出来ます。
知らなかったのですが、独自の記述方法で正規表現を記述できるのですね。 http://weitz.de/cl-ppcre/#create-scanner2 このツリーをパースしてスキャナを作ってくれる関数の説明にその詳細が書いてあります。この方式で書くと階層構造を持った状態で正規表現…
いい加減疲れた!正規表現つかうのがいいよ!最近は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" のようになっています。 これは、指定した範囲を引数の文字列で置き換える…