Shammer's Philosophy

My private adversaria

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

シェルでの文字列操作-20120805

あると思っていたがなかった(見つけられなかった?)ので書くことにしました。抜き出しや長さ判定はもっと良さそうなのがあるかもしれないけれども。 Equal判定 if [ $VALUE = "0" ];then echo "VALUE is 0"; else echo "VALUE is not 0"; fi 空文字判定 if [ …

Java Mail CC 送信 Sample

Java Mail Sample - Shammerismの内容に CC 送信処理を追加しただけだが。CC 送信するには、javax.mail.internet.InternetAddress の配列をもう一つ用意し、javax.mail.Message.setRecipients で Message.RecipientType.CC として渡す。 import java.util.Da…

関数を生成するマクロ・その5

関数を生成するマクロ・その4 - Shammerismでの課題を解決できた。バッククォートより後の内容が展開式になるが、展開式の中で展開式で宣言される defun の関数名を作成していたのが原因だった。つまりはケアレスミスのようなものだ。うまくいかなかった例…

関数を生成するマクロ・その4

関数を生成するマクロ・その3 - Shammerismでは、関数名を直接渡していたが、似たような名前の関数を定義したいときには関数名のうちの違う部分だけを渡せばよいようにしたい。と、いうわけでそのための実装を考えた。ベースは関数を生成するマクロ・その3…

cygwinでgrepできない

最近、最新版のcygwin(具体的なバージョンは忘れた)をインストール。大抵のテキストファイルはgrepできるのだが、一部できないものがあって原因を調べるとどうやら文字コード(ありがちな気もするが)。解消方法が見つかったのでメモ。 xyzzyでそのファイ…

defpackage の :use は common-lisp-user だけではダメだった

defpackage の :use を使う - Shammerismで :use に common-lisp-user を渡せばいい、と書いたが、これだけでは不足だった。これだけだと in-package した後で関数を定義することすらできない。 ? (defpackage "TEST" (:use common-lisp-user)) #<Package "TEST"> ? (in-pack</package>…

defpackage の :use を使う

関数を生成するマクロ・その3 - Shammerismで言及したパッケージの問題。対処がわかったのでメモ。まず、default のパッケージは COMMON-LISP-USER になる。 ? *package* #<Package "COMMON-LISP-USER"> ? なので、パッケージを移動することなく作成された関数は、この COMMON-LISP-USER</package>…

Quicklisp + CLISP

Clozure CL へ Quicklisp をインストールしたので、ついでに CLISP にもやってみた。CLISP の場合は、起動時のオプションが -i になる。 clisp -i clisp -i quick.lisp (quicklisp-quickstart:install) (ql:add-to-init-file) (ql:add-to-init-file) を実行…

QuickLispデビュー

Clozure CL を 1.7 にアップグレードしたら・・・ASDFが使えなくなってしまった。 1.6 の頃とtoolsディレクトリの構成が異なる。何かインストール方法異なっているのかと調べていたが、 ASDF本家のサイトにこんな文字が・・・ASDF-install is OBSOLETE. DO N…

Emacs 24.1 でコピーできなくなった

自分の環境では、このサイトを参考にしてOSのクリップボードとEmacsのkill-ringを分けている。だが、Emacsをアップグレードしたためか、うまく機能しなくなってしまった。 (OSのクリップボードへ選択領域をコピーできない。not connected とか出力される。…

関数を生成するマクロ・その3

関数を生成するマクロ・その2 - Shammerismと関数とマクロでのクォートの扱いの違い - Shammerismの結果を併せて、以下のようなマクロを定義。 ? (defmacro public-symbol (s) `(export ',s)) PUBLIC-SYMBOL ? (defmacro generate-semaphore-accessor (name…

関数とマクロでのクォートの扱いの違い

関数を生成するマクロ・その2 - Shammerismで、export と defun ではクォートの期待値が異なることで問題が発生した。この問題を解決するため、エクスポートでもクォートなしで情報を渡すことができるようにしたい。とりあえず思いついたのが以下。 ? (defu…

関数を生成するマクロ・その2

とあるパッケージの中で、とある関数を宣言してから、それを外部で使用させるためにエクスポートする、という処理を行う必要があるが(まあ、エクスポートしなくても unintern されていなければ::でアクセスできるのだが)、これをやるのが結構めんどくさい…

関数を生成するマクロ・その1

プログラムを書いていると、どうしても同じようなパターンの関数を定義することになる。それも、アクセッサのような単調なもの。単調なくせに数が多く、これをもっとスッキリさせることができないかと思っていたが、どうやらマクロでできそうだとわかる。と…

macro 展開式を見易くする

pprint という関数があるようだ。pretty-print の略だと思うが、これを使用すると整形して式を出力してくれる。 (defun macro-check (&rest body) (pprint (macroexpand-1 body))) が、試してみたがうまくいかない。 ? (defun macro-check (&rest body) (ppr…

【LISP繰り返し Hack 】do を展開してみる・その2

【LISP繰り返し Hack 】do を展開してみる・その1 - Shammerismの続きで、tagbody と go を使ってみた。dolist のようなものを想定して書いた。 ? (let ((target '("XXX" "YYY" "ZZZ"))) (tagbody loop-start (let ((x (car target))) (if (null x) (go loo…

push を使って dictionary を実現する

何かデータを一箇所に保存しておく、そんな箱を簡単に実現したい。昔、Lisp 独自 dictionary version 20111105 - Shammerismで書いたものがあるが、あまりにイケていない。。。push を使うと、もっとシンプルになった。 ? (defparameter table nil) TABLE ? …

関数渡しでif-elseを実現する

sort するには注意が必要 - Shammerismで、関数を引数として渡すことができることの可能性を考えてみたが、うまい例がなくそんなにすごいとは思えない感じになってしまった。なので、少しはマシと思える例を考えた。 (defun if-else (value cond yes no) (if…

sort するには注意が必要

sort 関数を使ってみた。これは破壊的なようで、使い方を間違えるといろいろと問題を引き起こすことになりそうなのでメモ。 フラットなリストをsortする 並び換え対象のリストがフラットであれば、あまり難しいことはない。並び換えの前にコピーしておけば、…

remove-if と remove-if-not を理解する

リストの中から、特定の条件に合致するものを削除するのが remove-if で、特定の条件に合致しないものを削除するのが remove-if-not だ。定義はわかっていても、引数に lambda 式が必要なのであまり使っていなかった、というか、強引に自力でリストの中身を…

【LISP繰り返し Hack 】do を展開してみる・その1

一応、LISP でも繰り返し構文がある。一部の書籍だと、関数型言語は繰り返し構文でなく、再帰で繰り返しを実現する、、、とか書いているがとんでもない。黎明期にはそういう時期もあったかもしれないが、そもそも関数型とは、変数の型に整数型、文字列型、浮…

Java Mail Sample

たまにしか書かないので忘れないようにメモ。 Sample Source Code import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.…

動的ローディングのサンプルコード

C

三つのリンク方式 - Shammerismで動的ローディングのコードを書いていなかったので、それを実装。と言っても、http://www.amazon.co.jp/C言語による-スーパーLinuxプログラミング-Cライブラリの活用と実装・開発テクニック-飯尾-淳/dp/4797361204で紹介され…

HTML変換コマンド

業務でテキストベースの文字をHTML対応のために(あくまで個人的都合で)変換していたが、さすがに面倒になってコマンドを定義したいと思ってちょっと調べてみた。以下のBlogの内容をちょこっと変更すればできそうだったのでやってみました。ブログの方、あ…

三つのリンク方式

C

C言語では、mainプログラム、というかmain function から実行される。通常のプログラムは、main のみで収まるサイズではないので、main 以外の関数に処理を小分けして、それを順番に呼び出すことで実行していく。しかし、その小分けされた関数でも数が多くな…

アセンブラコードまで展開してみる

C

gcc のオプションで -S というものがある。これを使用すると、アセンブラまで展開してくれて、拡張子 .s のファイルができる。当然だが、この拡張子 .s のファイルをコンパイルして実行コードを生成することも可能。 $ ls test.c $ gcc -S test.c $ ls test.…

LISP で改行しながら文字列出力する・その後

LISP で改行しながら文字列出力する・改 - Shammerismで文字列を改行と合わせて出力するように書いてみたものの、write を使用するとファイルに出力されたときにダブルクォートが残ってしまうことがわかった。ダブルクォートを残さないようにするには、write…

LISP で改行しながら文字列出力する・他

LISP で改行しながら文字列出力する・改 - Shammerismで、write を使う、という話を書いたが、よく調べてみるとterpri というのが new-line をストリームに送る、という関数だった。 CLHS: Function TERPRI, FRESH-LINE write-line で改行しているところに、…

LISP で改行しながら文字列出力する・改

LISP で改行しながら文字列出力する - Shammerismの実装では、改行が一行ごとにならなかったので別の方法を考えてみました。write というのがあるのでそれでできるかなと思ったのも束の間、以下のようなエラーに。 (with-open-file (f "file.txt" :direction…

Autotoolset を使ってみる

Tarball からビルドする際、呪文のように ./configure make make install を実行しているが、この形式でインストールが可能にしてくれるのがAutotoolsetというもの。ちょっとだけ試しに使ってみる。 実行ファイルの用意 #include <stdio.h> int main(){ printf("Hello</stdio.h>…