タグ

ブックマーク / trotr.hatenadiary.org (17)

  • 2010-09-22

    個人用のスクリプトを書く際には、便利なライブラリが全てuseされていると嬉しい。 (gauche.experimental.*は、これをuseするのが億劫になり使わないことが度々) 今までは逐一利用したいライブラリをuseしてきたけれど…面倒くさい。 特に他人と共有しようとするスクリプトでなければ、もっとわがままに振る舞っても良いのではないかと思った。 幸いgoshは-lオプションで事前に読み込むファイルを設定できる。 個人的な処理を行う際に起動するgoshコマンドをgosh-exとして作ってみた。 行う手順は以下のとおり ~/.gosh-ex作成 gosh-ex コマンドを作成 .gosh-ex useしておきたいライブラリなどをuseするなどする。 (use gauche.experimental.lamb) (use gauche.experimental.ref) (use gau

    2010-09-22
  • 2010-02-03

    人に自分の思ったことを伝えられない気がする。ヤバい。 なので、内容ともかく意味の通る文章を書く練習をする。 逆引きrubyの内容をscheme(gauche)で書いて、それを説明するようにしてみる。 間違ったところや気づかなかったところがあったりした場合には教えてください。 gaucheで文字列を使う場合、クラスを使用します。だからと言って、主に利用するのがクラスのメソッドというわけはありません。 文字列を結合する 文字列を更新する手続きは基的には用意されていません。文字列を結合する場合には、結合した文字列を新たに作りだすことになります。渡された文字列を結合した新しい文字列を返す手続きとしてstring-appendが使えます。string-appendは任意個の文字列を引数として取ることができます。 (define s "hello") (define s1 (string-appen

    2010-02-03
  • .emacsの設定に役立つ関数 - trotrの日記

    .emacsの中で定義していて便利だなと感じる関数/マクロの紹介。 とりあえず、aifとand-let*はUtilityとして必要かなと思います。 他にon-offを切り替えるトグルスイッチ見たいな関数を楽に定義できるdef-toggleというものを定義して使っています。 utilities (require 'cl) (defmacro aif (p true-clause &rest false-clause) (declare (indent 2)) `(let ((it ,p)) (if it ,true-clause ,@false-clause))) (defun singlep (pair) (and (consp pair) (null (cdr pair)))) (defmacro and-let* (exp &rest body) (declare (indent 1)

    .emacsの設定に役立つ関数 - trotrの日記
    koko1000ban
    koko1000ban 2010/03/26
    def-toggleいいな
  • repl-serverを立ち上げてclojureの起動時間を短縮 - trotrの日記

    はじめに clojure,scala,jrubyとかjvmの上に乗った言語は起動がとても遅い。*1 そんなわけで、これをどうにかしたいと思っていたのでした。 emacsclientのようにserverを立ち上げてそれにアクセスするという形にすれば起動は一回で済みそうです。 まだまだ改善の余地がたくさんあるけれど。途中経過。 todo いろいろなオプションに対応していない。 # こんな書式に対応していない*2 portとipアドレスが分かれば他人でも実行できてしまう。 sandbox化した方が安全かも? with-temp-nsを使うと楽(contrib) contribのclasspathを実行時に設定しないとダメなのか。*3 (このあたりもう少し楽にできる方法がないか考え中) how to use clojure nrepl.clj 12345 #server gosh nrepl-cl

    repl-serverを立ち上げてclojureの起動時間を短縮 - trotrの日記
    koko1000ban
    koko1000ban 2010/03/16
    起動時間短縮
  • project-euler1〜20 - trotrの日記

    clojureで書くことに慣れるために簡単な問題を解いてみる。 my.math.prime 自分用の個人的なライブラリはどのあたりに置くのが良いのだろう(今は~/mylib/clojure以下に置いている) (ns my.math.prime (:use clojure.contrib.math)) (defn prime? [n] (let [sqn (int (sqrt n))] (or (= 2 n) (and (odd? n) (loop [i 3] (cond (> i sqn) true (zero? (rem n i)) false :else (recur (+ i 2)))))))) (def prime-seq (let [seq ((fn step [n] (lazy-seq (if (prime? n) (cons n (step (+ 2 n))) (step (

    project-euler1〜20 - trotrの日記
  • 1ファイルだけのcall-graph - trotrの日記

    そのファイルで定義された関数だけ見る。let-fnやletの中で定義された関数は無視。 (use '[clojure.contrib.duck-streams :only (reader writer with-out-writer)]) (use '[clojure.contrib.str-utils :only (re-gsub)]) (defn read-sexps "Like read-lines but read with read function (not read-line)" [f] (let [rdr (-> (reader f) (clojure.lang.LineNumberingPushbackReader.))] ((fn step [] (if-let [item (read rdr false nil)] (lazy-seq (cons item (step

    1ファイルだけのcall-graph - trotrの日記
  • emacsからtimeout付きでprocessを呼び出す2 - trotrの日記

    emacs側では以下の2つのようなプロセスを呼び出せばいいことに気づいた。 . 動作 その後 this-process 渡されたコマンドを実行して もう一方のprocessが終わってなかったら殺す。 that-process sleepして もう一方のprocessが終わってなかったら殺す。 ;(require 'cl) (defvar spscwt-hooked-process nil) (defvar spscwt-sentinel-function nil) (defun spscwt-process-will-be-kill (that-process &optional this-buf) (lexical-let ((that that-process) (buf this-buf)) (lambda (&rest args) (when (eq 'run (process-s

    emacsからtimeout付きでprocessを呼び出す2 - trotrの日記
    koko1000ban
    koko1000ban 2009/12/28
    timeout付きでprocessを呼び出す
  • emacs,haskell補完2 - trotrの日記

    前回の続き。ghci上でタブを入力することで現れる候補を利用して補完。 でも、エラーもまるごと読み取って捨てているという強引なことをしているので適切な方法とは言えないような気もする。とりあえず、利用することはできるのでまぁいいや。 code (require 'anything) ;;;util (defmacro let1 (var val &rest action) `(let ((,var ,val)) ,@action)) (put 'let1 'lisp-indent-function 2) (defun define-many-keys (key-map key-table) (loop for (key . cmd) in key-table do (define-key key-map key cmd))) (defmacro toggle! (name) `(progn

    emacs,haskell補完2 - trotrの日記
  • ghciと通信して補完をする(かなり強引) - trotrの日記

    とりあえず目処は立った。 でも、他の人に進めようとする気にはなれないな。*1 (defmacro toggle! (name) `(progn (setq ,name (not ,name)) (message (format "%s:%s" ,(symbol-name name) ,name)))) (require 'inf-haskell) (defun haskell-send-string (str) (condition-case err (comint-send-string (get-process "haskell") (format "%s\n" str)) (error err))) (defvar haskell-preoutput-filter-functions nil) (defvar haskell-output-storage nil) (defvar h

    ghciと通信して補完をする(かなり強引) - trotrの日記
  • Rakefileを再帰的に探してrake testするelisp(TB) - trotrの日記

    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-success-color "honeydew") (defvar raketest-fail-color "LavenderBlush") ;;util (defsubst raketest-parent-dir (path) "return parent directory path of argument." (substring-no-

    Rakefileを再帰的に探してrake testするelisp(TB) - trotrの日記
  • faceの情報取得 - trotrの日記

    emacsの色の設定などを変更したかったので、カーソル位置の文字のfaceの情報を取得したかった。 現在位置のfaceは以下のようにして取得できる (get-char-property (point) 'face) 取得したfaceから設定されている情報をみたい。 face-all-attributesという関数が存在した。 (でも、この関数は継承元まで読んでくれないみたい)*1 face.el中を見てみた face-all-attributesはface-attributeを呼び出す際に、inherit(継承)の部分に値を渡していない*2 (defun face-all-attributes (face &optional frame) "Return an alist stating the attributes of FACE. Each element of the result

    faceの情報取得 - trotrの日記
  • putがウザくなってきたのでマクロを書く。 - trotrの日記

    (require 'cl) (defmacro set-put (progname edit-list) "edit-list = ((<value> . (sym ...)) ...)" `(progn ,@(loop for (depth sym-list) in edit-list nconc (loop for sym in sym-list collect `(put (quote ,sym) ,progname ,depth))))) (set-put 'scheme-indent-function ((1 (guard with-locking-mutex with-signal-handlers with-time-counter with-string-io with-port-locking with-output-to-string with-output-to-pr

    putがウザくなってきたのでマクロを書く。 - trotrの日記
  • gaucheの補完をanythingから使えるようにしてみた - trotrの日記

    symbol名の補完 inferior-gauche-modeでは以下の点が不満でした。 scheme-other-window*1で立ち上がったreplとも通信できない anythingで候補を選択できない*2 inferior-gauche-modeではcompleting-readを利用して候補を選択する replと通信する scheme-other-windowで使われているrun-schemeはcomint.elの関数を使ってます。 なので、replの出力を得るには、comintのprocess-filterを通る出力をどこかで読み取ることができればいいんじゃないかと思いました。 図にするとこんな感じです。 eval -> (comintの処理) -> replの出力 eval -> 新しく作成するfilter -> (comintの処理) -> replの出力 comintのf

    gaucheの補完をanythingから使えるようにしてみた - trotrの日記
  • javascriptなどのfunctionとかの表示を短くしてみる - trotrの日記

    書いたもの (defmacro set-pretty-keywords (mode keyword-num-char-list) `(font-lock-add-keywords ,mode (quote ,(loop for (keyword num char) in keyword-num-char-list collect `(,keyword (0 (prog1 () (compose-region (match-beginning ,num) (match-end ,num) ,char)))))))) .emacs (add-hook 'js2-mode-hook (lambda () (set-pretty-keywords nil (("\\<function\\>" 0 ?F) ("\\<return\\>" 0 ?→))) )) このような内容が [1,2,3].map

  • javascriptとemacsで対話的に開発がしたい(html使わないです><) - trotrの日記

    schemeでプログラムを書くとき、少し関数を書いてから実行して結果をみるとかいうことをよくします。 そんなことをjavascriptでもしたいと思いました。 なので、てきとーにelispを書いてみました。 準備 javascriptのインタプリタが必要す。(eg.spidermonkey) spidermonkeyをインストールする場合(ubuntu) sudo aptitude install spidermonkey-bin 使い方 最初にC-c Sを入力.(javascriptのshellが立ち上がる) その後は以下の関数が使えるようになる。 C-c C-c :js-output/comment 現在カーソルがある行を実行する (regionが指定されている場合はregion内のコードを実行する) 行末に結果を出力する*1 C-c C-l :js-send-buffer 現在のバッ

    javascriptとemacsで対話的に開発がしたい(html使わないです><) - trotrの日記
  • 2007-12-20

    ここからhttp://q.hatena.ne.jp/1137478760 このサイトを発見!。便利そうなので少しいじって導入。 http://www-tsujii.is.s.u-tokyo.ac.jp/~yoshinag/tips/elisp_tips.html#buffer 変えたところ。 バッファ間の移動する処理に名前をつけた goto-prev-buffer goto-next-buffer easy-buffer-move.elという名前で別のファイルに分けた(.emacsが長くなるのが嫌なので…) 作ったファイルはこんな感じ。(easy-buffer-move) (defvar my-ignore-blst ; 移動の際に無視するバッファのリスト '("*Help*" "*Compile-Log*" "*Mew completions*" "*Completions*" "*Ap

    2007-12-20
  • 2008-07-11

    (defvar ri-program "fri") ;;friを使わないなら ;;(setq ri-program "ri") (defvar refe-program "~/bin/refe.sh") (defvar ruby-all-methods nil) (defvar my-ruby-reference-last-word "") (defun read-ruby-document (document com) "Open each ruby's ruby-document on other window" (let ((buf "*ruby document*")) (if (equal com "") (shell-command (concat document " -l") buf) (shell-command (concat document " " com) buf

    2008-07-11
  • 1