「Lisp」を含むブログ

2010-02-10

ClojureとCommon Lispのcondの話 omasanoriomasanoriはてなブックマーク - ClojureとCommon Lispのcondの話

Common LispとClojureではcondの書式がちょっと違う。Common Lispだと、(cond ((test) (expr)) ((test) (expr)))Clojureだと、(cond (test) (expr) (test) (expr))で、Clojureだとtestとexprの間に改行入れたら読みにくい、という話。こんな感じ。(cond (test) (expr) (test) (expr))読みにくい。Common Lispならネストした括弧のおかげでいい感じになる。(cond ((test) (expr)) ((test) (expr)))でも、そこに改行を入れたくなるような長いexprは大抵括弧が二段以上あるので、(cond (test) (foo ... 続きを読む

Memo cranebirdcranebirdはてなブックマーク -  Memo

Y-combinator の最大の実利は、letrec を実装していなくてもフィボナッチ数列が計算できることだ。たぶん。VSECD> (run '(((lambda (f) ((lambda (g) (f (lambda (arg) ((g g) arg)))) (lambda (g) (f (lambda (arg) ((g g) arg)))))) (lambda (f) (lambda (n) (if (VSECD> VSECD> (describe *)#スタックトップは514229コードの長さは 121、PC は 121PC はコードの範囲外プロファイル:NIL: 4113828LDC: 2571143CONS: 4113828LDF: 2056918AP: 4113828LD:... 続きを読む

Emacs org-modeを使ってみる: (8) メモを取る tamura70tamura70はてなブックマーク - Emacs org-modeを使ってみる: (8) メモを取る

最近emacsのorg-modeを使ってみている.以下のように色々な使い方ができて非常に便利だ. メモを取る (アウトラインプロセッサ) TODOリストの作成 GTD (Getting Things Done)ツールとして使う 簡単な文書(HTML, LaTeX)作成今回はRemember機能を用いてメモを取る方法について,使い方をまとめてみる.なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている. リンク Org-Mode http://orgmode.org/ http://orgmode.org/manual/Remember.html#Remember [http://hpcgi1.nifty.... 続きを読む

2010-02-09

Emacs org-modeを使ってみる: (7) ハイパーリンク tamura70tamura70はてなブックマーク - Emacs org-modeを使ってみる: (7) ハイパーリンク

最近emacsのorg-modeを使ってみている.以下のように色々な使い方ができて非常に便利だ. メモを取る (アウトラインプロセッサ) TODOリストの作成 GTD (Getting Things Done)ツールとして使う 簡単な文書(HTML, LaTeX)作成今回はハイパーリンクについて,使い方をまとめてみる.なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている. リンク Org-Mode http://orgmode.org/ http://orgmode.org/manual/Hyperlinks.html#Hyperlinks [http://hpcgi1.nifty.com/spen/i... 続きを読む

Arc に遊ばれたい OnLisp のマッチングオペレータ hchbawhchbawはてなブックマーク -  Arc に遊ばれたい OnLisp のマッチングオペレータ

OnLisp のマッチングを写経しつつ劣化させちゃっている断片です><; if-match from _On Lisp_.(def mdestruc (pat seq (o atom atom) (o n 0)) (if no.pat nil (aif (if atom.pat pat) `((,it (cut ,seq ,n))) (with (p (car pat) rec (mdestruc cdr.pat seq atom inc.n)) (if atom.p (cons `(,p ((get ,n) ,seq)) rec) (w... 続きを読む

equal-case silesileはてなブックマーク - equal-case

equal等値なキーを扱えるようにしたcase。主にstring型に対して適用することを想定。;; TODO: 重複キーのチェック(警告)をつけるべき(defmacro equal-case (expr &rest clauses) (let ((v (gensym))) `(let ((,v ,expr)) (cond ,@(stable-sort (mapcar (lambda (clause) (destructuring-bind (keys . forms) clause (cond ((member keys '(t otherwise)) ; (otherwise|t ...)なら ... 続きを読む

有限体上での連立方程式(ガウスの消去法) jeneshiccjeneshiccはてなブックマーク - 有限体上での連立方程式(ガウスの消去法)

有限体上で連立方程式を解くプログラム(ガウスの消去法の実装). 基本は実数体上のガウスの消去法と同じ. 除算を有限体での逆元にするだけ(拡張ユークリッドの互除法). ランク落ち?対策は思ったより簡単だった.例えば,2元体上で1 1 1 11 1 0 10 0 1 0,つまりx1 + x2 + x3 = 1x1 + x2 = 1 x3 = 0は掃き出すと1 1 1 10 0 1 00 0 0 0となり,上三角ではなくなるが,もちろん解は存在する(x1 = 1, x2 = x3 = 0) . これを使えば,FlipItの解の存在判定が解ける.以下はガウスの消去法本体. Ax = b (mod q) を解くのが目的.a は係数行列,つまり a = [A | b]である.x は解を記録する配列.q は素数で有限体の位数.... 続きを読む

開いている全てのバッファの.cppと.hをrevert-bufferするelisp trotrtrotrはてなブックマーク - 開いている全てのバッファの.cppと.hをrevert-bufferするelisp

http://d.hatena.ne.jp/berrylife/20100207/1265552316開いている全てのバッファの.cppと.hをrevert-bufferするなら(require 'cl)(defun revert-matched-buffers (pattern) (loop for b in (buffer-list) when (string-match pattern (buffer-name b)) do (with-current-buffer b (revert-buffer))))(defun c++-buffers-revert () (interactions) (revert-matched-buffers "\\.\\(h\\|cpp\\)$"))でも、こんなことをするよりも、c++-modeのhookかc系のmodeのho... 続きを読む

2010-02-08

Emacs org-modeを使ってみる: (6) アジェンダ表示 tamura70tamura70はてなブックマーク - Emacs org-modeを使ってみる: (6) アジェンダ表示

最近emacsのorg-modeを使ってみている.以下のように色々な使い方ができて非常に便利だ. メモを取る (アウトラインプロセッサ) TODOリストの作成 GTD (Getting Things Done)ツールとして使う 簡単な文書(HTML, LaTeX)作成今回はアジェンダ(行動計画)表示について,使い方をまとめてみる.なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている. リンク Org-Mode http://orgmode.org/ http://orgmode.org/manual/Agenda-Views.html#Agenda-Views [http://hpcgi1.nifty.... 続きを読む

Clojure のエレガントなところ fatrowfatrowはてなブックマーク - Clojure のエレガントなところ

...nil cnil dnil enil nil)関数型は直截的な記述ができる一方、引数が全て評価されてから関数に渡されるため引数の大きさ分のコスト(主にメモリ)がかかる。命令的なコードでは時間さえ掛ければ解けるような問題でも関数的な記述ではメモリの制限で解けない事もある。それを解決するのが遅延シーケンス。実際に値が必要になるまで何もしない。関数型の直截的な記述と省メモリのいいとこ取り。他の lisp でも遅延シーケンスは使えるが、Clojure程容易には使えないと思う。特に何も考えなくても多くの関数が遅延シーケンスを返してくれる。しかも、遅延シーケンスの管理上のコストすら削減しようと試みているらしい。[Clojure 1.1 効率のためにトランジェ... 続きを読む

無名関数で直にmapやvectorを返す時は #() ではなく fn を使う fatrowfatrowはてなブックマーク - 無名関数で直にmapやvectorを返す時は #() ではなく fn を使う

user=> ((fn [x x]) 1)[1 1]user=> ((fn {:a x}) 1){:a 1}fn が ok なので #() でもいけそうだと思ったがuser=> (#([% %]) 1)java.lang.IllegalArgumentException: Wrong number of args passed to: LazilyPersistentVector (NO_SOURCE_FILE:0)user=> (#({:a %}) 1) java.lang.IllegalArgumentException: Wrong number of args passed to: PersistentArrayMap (NO_SOURCE_FILE:0)exception に。一貫性ないなあと思ったがそんなことはなかった。user... 続きを読む

2010-02-07

Emacs org-modeを使ってみる: (5) TODOリスト tamura70tamura70はてなブックマーク - Emacs org-modeを使ってみる: (5) TODOリスト

最近emacsのorg-modeを使ってみている.以下のように色々な使い方ができて非常に便利だ. メモを取る (アウトラインプロセッサ) TODOリストの作成 GTD (Getting Things Done)ツールとして使う 簡単な文書(HTML, LaTeX)作成今回はTODOリストについて,使い方をまとめてみる.なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている. リンク Org-Mode http://orgmode.org/ http://orgmode.org/manual/TODO-Items.html#TODO-Items [http://orgmode.org/manual/Date... 続きを読む

ハッカーと画家 tototoshitototoshiはてなブックマーク - ハッカーと画家

はてなのニュースで取り上げられてましたね。それで一年くらい前に買ってまだ読んでなかったのを思い出した。Lisp > Perl, Python > JavaらしいからちょっとLisp勉強してみよっとw

用語のまとめ〜高階関数・レキシカルスコープ・クロージャ〜 takaakiratakaakiraはてなブックマーク - 用語のまとめ〜高階関数・レキシカルスコープ・クロージャ〜

だいぶん理解できてきたので、ここいらでまとめてみる。高階関数関数を引数として受け取ったり、関数を返したりする関数。関数を受け取ることで一部の処理を抽象化できる。たとえばデータを比較して並べ替えを行う関数で、データを比較する方法を受け取るようにすることで、比較する方法を抽象化した処理にできる。C言語では, qsort関数やbsearch関数が高階関数にあたる。レキシカルスコープ(静的スコープ)引数以外の変数(自由変数)が構文から一意に定まるスコープ。クロージャ(閉包)定義された環境をスコープとする関数。クロージャでは、変数が関数の中で定義されていなくても、関数定義の時に関数の外側に存在していれば参照できる。定義の時に存在しているかを見に行くため、必然的にクロージャを持つ言語はレキシカルスコープを持つ。ただし、「変数の 値を参照するか or ポインタを参照するか」は言語に... 続きを読む

今日の「こんな emacs-lisp が欲しい」」 berrylifeberrylifeはてなブックマーク -  今日の「こんな emacs-lisp が欲しい」」

全ての .h と .cpp を revert-buffer する

[Scheme][Nu] 第1回 Scheme コードバトンに参加したのですが・・・・ yuum3yuum3はてなブックマーク -  [Scheme][Nu] 第1回 Scheme コードバトンに参加したのですが・・・・

第1回 Scheme コードバトン に Nu で参加したのですが、ぜんぜん別ものになってしまったのでバトンからは離脱しましたが、成果は GitHub に上げておきました。上の画像のような GUI版になっています。なぜ別のものになったかというと Nu は Lispをベースとしていますが、List処理機能は低く 最近の Scheme からコードを持ってくるには、あまりにも非力 Nu はオブジェクト指向言語なので (car e) はではなく (e car) と記述します、もちろん car 関数等も用意されていて... 続きを読む

emacs設定をまとめる strnetstrnetはてなブックマーク - emacs設定をまとめる

家のメインPC、メインサーバ、会社のPC、Lisp専用機、そしてNetWalker。其々でemacsを使っているので、設定をまとめました。といっても前からsvnで管理していたのでほとんどそういう風にはなってたのですが、直接X上で起動した時とmlterm,screenから起動した時で挙動を変えたいので関数を用意してみました。(defun on-x? () (getenv "DISPLAY"))判定がベストとはあんまり思えないけど思うように動いたのでとりあえずおk。(when (on-x?) (menu-bar-mode nil) (tool-bar-mode nil) (scroll-bar-mode nil))こんな感じの使い方。ちなみに家のPCはWindowsXPのMeadowもありますが面倒臭すぎて無視。Win上で開発しないしサクラエディタでいいや。

Lispで文字を寄せる sakura-1sakura-1はてなブックマーク -  Lispで文字を寄せる

...e))) (concatenate 'string left-space-string target right-space-string )) target ))それでは実行してみます(make-string-centered 10 "Lisp")" Lisp "(make-string-lefted 10 "Lisp")"Lisp " (make-string-righted 10 "Lisp")" Lisp" こんな感じ。うまく動いているような気がします。 続きを読む