この前は初めてながら、何か10進数を渡すと2進数・16進数に変換して挿入する関数を書いてみました。



くらいまーず はい


ちょこっと進化させてみます。


まず、10進数が入ったリストを渡すと、

リストの各要素に対して上と同じような結果を返してくれる関数を考えてみました。


くらいまーず はい


引数としてリストを受け取ったら、

mapcarとlambdaを使って、リストの各要素を2進/16進に変換してます。


くらいまーず はい

試しに10から40までの数字が入ったlistAを引数に渡してみます。



くらいまーず はい

それぞれを処理して、改行付きで書きだしています。


いちいちリストを定義するのも面倒なので、


10,20,30,40


とか入力してある数字を読み込んで上と同じ処理をさせてみたいと思います。


前準備として、


くらいまーず はい

こんな感じで、カンマで区切った文字列を数字のリストにする関数を作ってみます。




くらいまーず はい

split-stringを使ってカンマごとに分割された文字列のリストを作って、

string-to-intで文字列を数字に変換してます。



実験すると、上手く動いてそうな感じ。


くらいまーず はい

後はEmacs上で範囲選択した箇所の文字列を参照して、

今までの関数を適用してあげれば望むものが出来そうな感じですね。



範囲選択した文字列を参照するには、

こんな感じで書くと良さそうです。


くらいまーず はい



こんな感じで背景が青くなってる部分を選択して、

先ほどの関数を呼び出すと


くらいまーず はい


一番下に領域選択している個所の文字列が表示されてます。


くらいまーず はい


というわけで、

範囲選択->カンマで区切って整数のリスト作成

->各整数を2進/16進変換して結果を挿入

するプログラムが下みたいな感じになりました。

なんか使われてない変数が混じってますね・・・


くらいまーず はい


こんな感じでカンマ区切りで入力した10進数の文字列を領域選択して、

先ほどの関数を呼び出すと・・・


くらいまーず はい


こうなりました。

何かに使えそうな気がする・・・

色々勉強していくと、もっとシンプルに同じ事が出来そうですね。


くらいまーず はい


勉強がてら、文字列Aの何文字目に文字列Bが含まれているのかを返す関数も作ってみました。



くらいまーず はい

文字列Aを一文字目から切り取っていって、文字列Bと初めて一致した文字数を返す感じです。



結果はこんな感じ。

文字列Aは"http://www.google・・・"で、文字列Bとして"www" "test" "just"を渡して結果を見てます。


くらいまーず はい


せっかくなのでlispxmpを使って、lispを書いてみました。

取り敢えず10進->2進変換の関数でも書いてみます。


早い話が、2で割ってあまった数を継ぎ足していけばよい訳なので、

文字列の結合を試してみました。


"concat"で文字列が結合できますが、

数字を渡すと文法エラーになります。


くらいまーず はい

せっかくなので、数字を渡すと文字列に変換して結合してくれる

"my_concat"という関数を定義してみます。



取り敢えず引数は2つだけで、

条件分岐を使って無理やり書いてみました。


くらいまーず はい


数字を渡したり、数字と文字列を渡したり、

何種類かテストしてみると取り敢えず動いていそうです。


くらいまーず はい


せっかくなので、my_concatを使って0から10までの数字を連結した文字列を作ってみました。


くらいまーず はい


10進数を2進数に変換する関数を書いてみました。


くらいまーず はい


正しく変換出来てそうです。


くらいまーず はい

せっかくなので、10進->16進変換の関数も書いてみます。

簡単にやるには

(format "%x" 255)

とか書いて評価すると16進になる見たいです。


16進と言えば、10から上がA,B,C,,,とアルファベットになるので、

数字をアルファベットに変換する関数を書いてみます。


char-to-stringを使うと出来そうな感じです。

0~15までのリストを渡すと、きちんと0~Fに変換してます。


くらいまーず はい


上の実験を元に0~15の数字を16進の表記に直す関数を書いてみました。


くらいまーず はい


上で作った表記変換の関数を使って、

10進->16進変換の関数を定義してみました。

テスト結果も正しい気がします。


くらいまーず はい


せっかくなので、何か役に立ちそうな匂いがするものに出来ないかなと、

10進数を渡すと2進・16進変換して画面に書き込んでくれる関数を作りました。


くらいまーず はい


取り敢えず適当な場所で、

M-x my_insert_binhex

と入力すると


くらいまーず はい

一番下に

Input:

と出てくるので、数字を入れます。


くらいまーず はい


そうすると、入力した数字を2進・16進に変換したものと一緒に

カーソルの位置に挿入してくれます。

仕事に使えそうな感じがしてきました・・・


くらいまーず はい

今の状態だと、桁数の異なる数を入力したときに表示位置がずれるので、

少し修正してみます。


くらいまーず はい

こんな感じにしてみました。

少しシンプルに出来たかな・・・?


くらいまーず はい


桁が変わっても、右端で揃えた感じで見やすくなりました。

くらいまーず はい

10進数の数字が書かれている領域を選択して何か関数を走らせると、

16進とか2審に変換した文字列を挿入してくれるようなのが作れると便利そうです。


もうちょっと勉強します。


なんとなく、10進数のリストを渡すと変換してくれる関数を作ってみました。


くらいまーず はい

下みたいな10進数のリストを引数として渡してあげると、


くらいまーず はい


各数字と2進・16進変換した文字列を結合したリストを返します。

くらいまーず はい

なんか出来るような気がしますね

本も買ったことだし、自分でなんか関数書いてみたいので

Emacs Lispのお勉強を始めました。


お手軽には、scratch bufferとかで何か式を書いて、

式の後ろで C-j を押すと
くらいまーず はい


式の後ろに結果を書いてくれます。


くらいまーず はい

若しくは式の後ろで  C-x C-e を押すと、

一番下の所に結果が表示されます。


くらいまーず はい


もうちょっと対話っぽくやりたい時は、

M-x ielm

でIELMを起動すると、

下みたいな感じで書いた式の結果が見れます。


くらいまーず はい


emacs-w3mとかでWEB上のLISP解説ページに行くと、

C-x C-eで結果が表示されて面白かったりします。


上見たいな感じでポチポチお勉強しても良いのですが、

下のページに便利なものを見つけました。


http://d.hatena.ne.jp/rubikitch/20090313/lispxmp


適当にファイルを開いて、式を幾つか書いて、

結果を見たい式の後ろに

; =>

と書いておきます。


くらいまーず はい


で、M-x lispxmp

と入力すると、一辺にその後ろに結果を挿入してくれます。


くらいまーず はい

どこか一か所変えるたびに、

書いた式の後ろでキーをタイプする必要もないし、

履歴がばっちり残せます。



後は同じ方のHPに乗っていたopen-junk-fileを導入しました。

http://d.hatena.ne.jp/rubikitch/20080923/1222104034


名前は「junk-file」ですが、

コマンド一発で日時をタイトルにしたファイルを作るものです。


会議の議事録とったり、

調べ物の備忘録代わりにファイルを作ったり、

もちろんLISPの勉強用使ったりと幅広く使ってます。


1~2行のメモならOrg Rememberを使うんですが、

長いメモになるとこっちの方が便利です。


デフォルトのタイトルは「日時」ですが、

別に変更も出来ますし。


自動で年と月に分類したフォルダに入る設定になってるので、

ファイルが散らばってしまう事もありません。