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

書き初め

schemeの感覚で書くとこんな感じかもしれない。foldの代わりにreduceで (defun dirs-children (dirs &optional exclude) (let ((exclude* (or exclude (mapconcat 'identity '("\\.\\{1,2\\}$" "\\.git$" "\\.svn$") "\\|")))) (nreverse (reduce #'(lambda …

lstripとかrstripとか欲しくなる。

例えば shell-command-to-stringで返ってきた文字列の末尾にいらない改行が含まれたりだとか。 そんなわけで、自分で定義して使っています。 code (defun rstrip (str) (replace-regexp-in-string "[ \t\n]+$" "" str)) ;;(defun lstrip (str) (replace-rege…

count-up

http://d.hatena.ne.jp/kitokitoki/20091219 http://d.hatena.ne.jp/gongoZ/20091222 (defun count-up (d) (interactive "P") (when (looking-at "[0-9.]") (let ((col (current-column)) (beg (progn (skip-chars-backward "[0-9.]") (point))) (end (progn…

info-modeで使うanything(memo)

anything-c-moccurのように、selectionを移動するたびに対応した行に移動する方法がわかった。 (defmacro let1 (var val &rest body) (declare (indent 2) (debug t)) `(let ((,var ,val)) ,@body)) (defmacro ilambda (&rest body) `(lambda () (interactiv…

timer用のanythingのSource

何となく作ってみた。(特に意味はない) 一度定義したタイマーを再利用したいかもしれないということで、いきなり殺すのではなく、stop-listというところに退避させるようにしている。でも、reviveは実装していない。*1 (defvar stop-timer-list nil) (defun …

keysnailを試そうとしてみた->失敗.

勧められたので、keysnailを入れてみました。 ESCをMとして認識させたいのだけれど、上手くいきませんでした。 .keysnail.jsに以下を追加すればいいはず…だと思ったのですが。 key.isMetaKey = function (aEvent) { return KeyEvent.DOM_VK_ESCAPE == aEvent…

emacsからtimeout付きでprocessを呼び出す2

emacs側では以下の2つのようなプロセスを呼び出せばいいことに気づいた。 . 動作 その後 this-process 渡されたコマンドを実行して もう一方のprocessが終わってなかったら殺す。 that-process sleepして もう一方のprocessが終わってなかったら殺す。 ;(req…

emacsからタイムアウト付きでプロセスを呼び出す。

なかなかうまく行かない。 with-timeoutはprocessの呼び出しに対応していない。 sleep-forは渡した秒数だけ待たないこともある。(原因不明) (sleep-for 3)が0.1xxx秒で終わってしまうことも 今のところはこのような感じ。(一応目的にあった振る舞いはするよ…

gauche0.9rc2がでてた

インストールしてみる。 とりあえずビルド。 wget http://practical-scheme.net/vault/Gauche-0.9_rc2.tgz tar zxvf Gauche-0.9_rc2.tgz cd Gauche-0.9_rc2 gauche-config --reconfigure | sh make テスト make test cat test.record # Total: 9994 tests, 9…

マッチする文字列を後ろから探す。

http://d.hatena.ne.jp/whitypig/20091102/1257187523 with-temp-bufferとre-search-backwardを組み合わせると惜しい結果にはなる。 一文字ずれてしまう。 (defvar str "This is a foo that is not same as the foo appeared in that sentence written by fo…

メモ化マクロを作ってみた(tarai)

e.g. ;;メモ化マクロ(define-memoize)を利用 (define-memoize (tarai (x 'eqv?) (y 'eqv?) (z 'eqv?)) (if (<= x y) y (tarai (tarai (1- x) y z) (tarai (1- y) z x) (tarai (1- z) x y)))) ;;普通の定義 (define (tarai2 x y z) (if (<= x y) y (tarai2 (t…

gaucheでterminalに色のついた文字を出力する

ansi-colorを利用した色のついた文字列を作成するライブラリを書いてみました。 e.g. (add-load-path ".") (use ansi-color) (ansi-color-list) (let1 rc (ansi-color 'red) (print "foo" (rc "foo") "bar" (rc "bar"))) (use text.tree) (print (tree->stri…

haskellで計算以外のことをしようと思ったとき

mapMとmapM_の違いにはまる。 Prelude> mapM :: (Monad m) => (a -> m b) -> [a] -> m [b] Prelude> mapM_ :: (Monad m) => (a -> m b) -> [a] -> m ()

vimperatorを入れました。

便利です。vimperator。 いくつか分からなくて嵌ったところがあったのでメモ。 嵌ったものは以下の通り いつものaddonのwindowが開けない。 文字化けしてしまったときに、手動でエンコーディングを指定できない。 現在見ているhtmlのsourceが見れない。 いつ…

and-let*をelispで実装してみた。

srfi-2のand-let*がelispになかったので、実装してみました。 and-let* let*みたいなもの 値の束縛以外に条件式も渡せる 条件式の真偽で実行を続けるかどうか決める。 偽になったら、途中で実行中断nil(#f)を返す and-let*の利用例 ;;let*のように使える。 (…

Real World Haskell(3)[Exercise4-2]

foldlを使ってanyを定義すると.... import Data.List (foldl', groupBy) import Data.Char (digitToInt, isDigit, intToDigit, isSpace) import GHC.Base (maxInt) import Data.Either ---Exercise 4.2.1 asInt_fold :: String -> Int asInt_fold = foldl' h…

Real World Haskell(2)[exercise4]

import Maybe (catMaybes) ---Exercise 4.1 safeHead :: [a] -> Maybe a safeTail :: [a] -> Maybe [a] safeLast :: [a] -> Maybe a safeInit :: [a] -> Maybe [a] safeFunc f [] = Nothing safeFunc f xs = Just $ f xs safeHead = safeFunc head safeTail …

real world haskell(1)[Exercise3]

real world haskellを買ったので読んでいる。exercise3をやってみた。grahum-scanはもう少しきれいに書けそうな気がする。 import Data.List -- http://book.realworldhaskell.org/read/defining-types-streamlining-functions.html ---Exercise 3.1 length1…

haskell補完3(静的な補完がしたい)

静的な補完もしたい。(リファレンスなどを調べるのに、静的な補完の方が便利)。 実行後は以下のようなファイルが生成される。(ArrayにはAraryモジュールの情報が格納されている) . |-- modules | |-- Array | |-- Bits | |-- CError | |-- CForeign | |-- C…

emacs,haskell補完2

前回の続き。ghci上でタブを入力することで現れる候補を利用して補完。 でも、エラーもまるごと読み取って捨てているという強引なことをしているので適切な方法とは言えないような気もする。とりあえず、利用することはできるのでまぁいいや。 code (require…

ghciと通信して補完をする(かなり強引)

とりあえず目処は立った。 でも、他の人に進めようとする気にはなれないな。*1 (defmacro toggle! (name) `(progn (setq ,name (not ,name)) (message (format "%s:%s" ,(symbol-name name) ,name)))) (require 'inf-haskell) (defun haskell-send-string (s…

haskell気に入ったかもしれない。

本買おうかな。何が良いのだろう?

"ghci> (length [1..10]) / 2"がerrorを吐く理由

"/"(in haskell) ≒ "/." (in OCaml)ということみたい。 以下の式を実行するとエラーになる。 ghci> (length [1..10]) / 2 <interactive>:1:0: No instance for (Fractional Int) arising from a use of `/' at <interactive>:1:0-19 Possible fix: add an instance declaration for (Fr</interactive></interactive>…

haskellで遊んでみた。

install sudo aptitude install ghc6-doc haskell-mode とりあえず、何か動かしてみる。 /usr/share/doc/ghc6-doc/index.htmlの中を見てみる。 Data.Listというもの発見*1 おおよそ、見当がついたの気がしたので使ってみる。 import Data.List l = take 5 [1…

Rakefileを再帰的に探してrake testするelisp(TB)

http://d.hatena.ne.jp/modka/20090820/1250759260 書いてみました。*1 (require 'cl) ;; (defvar raketest-old-color (frame-parameter (selected-frame) 'background-color)) (defvar raketest-output-buffer "*rake test output*") (defvar raketest-succ…

method一覧

以下の方法が一番楽かもしれない。 準備 qriを使えるようにする。*1 sudo gem install fastri fastri-server -b .emacs (require 'ansi-color) (require 'anything) (unless (fboundp 'rlet1) (defmacro let1 (var val &rest action) `(let ((,var ,val)) ,@…

C++の勉強をしてます。

まだ、始めて2日くらいです。 読んでいる本 最新ANSI C++オブジェクト指向プログラミング―エキスパートへの最短コース まだ300ページくらい。重い。 嫌、別にエキスパートへの最短コースを通りたい訳じゃないけど。 分かり易い気がする。どういう風に解釈さ…

emacs内にlocal-twitter的なものを創った。

追記 上から下に挿入していくのを止めて、下から上に上がっていくようにした。(上の方が最近、下の方が過去) use-local-mapを使っていたせいで、post-to-buferを実行した後key-mapが変更されてしまっていた。 read-from-minibufferはkey-mapを引数として取…

リハビリ

最近、何もしていなかったので何か書く。これをやってみる。 内容 カーソル上にある単語を" "で区切って強調表示する。 (defun strong () (interactive) (let ((start (progn (backward-word 1) (point))) (end (progn (forward-word 1) (point)))) (let ((w…

並列時の実行順序の組み合わせの数

久しぶりに,sicpを読んでみた。 (x y z) (a b c)で20通りなのはほんとなのかな? (use srfi-1) (define (f s1 s2) (cond ((and (null? s1) (null? s2)) '()) ((null? s1) (cons (car s2) (f s1 (cdr s2)))) ((null? s2) (cons (car s1) (f (cdr s1) s2))) (e…