haskellではquicksortがやたらエレガントに書ける。
([1]を参考にしました)
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = qsort smaller ++ [x] ++ qsort larger
where
smaller = [ a | a <- xs, a <= x]
larger = [ b | b <- xs, b > x ]
これの発想をちょっと真似たらschemeでもなかなかうまくかけた。(気がする)
(use srfi-11)
(define (lefter&righter ord a lst)
(let loop ((rmn lst) (lefter '()) (righter '()))
(cond ((null? rmn) (values lefter righter))
((eq? (car rmn) a) (loop (cdr rmn) lefter righter))
((ord (car rmn) a) (loop (cdr rmn) (cons (car rmn) lefter) righter))
(else (loop (cdr rmn) lefter (cons (car rmn) righter))))))
(define (quicksort ord lst)
(if (null? lst) lst
(let-values (((lefter righter) (lefter&righter ord (car lst) (cdr lst))))
(append (quicksort ord lefter) `(,(car lst)) (quicksort ord righter)))))
初めにHaskell版のwhere以下に相当する関数を作っている。
(これ自体きっと有用だろう。)
あとはHaskell版とほとんどおなじだ。
新しい点としては順序ordを指定できること。
これで文字列間の順序なんかも定め整列させることができる。
あとこのプログラムを作っている過程で多値に目覚めてしまった。
別になくてもいいけどあるととても楽!
[1] プログラミングHaskell Graham Hutton 著 山本和彦 訳
keyword:プログラミング,linux,親指シフト,(物理),TeX,emacs,など々々
初心者のパソコン関係の備忘録。
環境はおもにVine -> Debian -> Gentoo -> Debian -> Gentoo -> FreeBSD
最近は研究室のサーバーを使って遊んだり。
2011年7月1日金曜日
2011年5月12日木曜日
正方形のpdfファイル
なぜかプレゼンテーションを正方形でやりたくなった。
情報まとめ
step1 psファイルを作成する
step2 正方形にする
step3 pdfにする
step1
TeXを使用していたのでここはdvipsで問題ない。
step2
できあがったpsファイルをテキストエディタで開く。
冒頭の
%!PS-Adobe-2.0
を
%!PS-Adobe-2.0 EPSF-2.0
に変更。(バージョンは適当に)
%%DocumentPaperSizes をa4からsquareに変更。
BoundingBoxを正方形にしないと上が適応されない模様。
Step3
オプション
ps2pdf14 -dEPSCrop foo.ps
によって正方形のPDFファイルができるが、BoundingBoxがうまく設定されていない。
しかしPDFのそれを変更する方法が分からなかったので、Step2でできたPSファイルを一ページずつPDFに変換し結合するという方法をとった。これはシェルスクリプトでできる。
以下のようなかんじ
#!/bin/bash
for i in `seq 1 2`
do
psselect -p $i $1.ps $1_00$i.ps
ps2pdf14 -dEPSCrop $1_00$i.ps
done
pdftk $1_[0-9][0-9][0-9].pdf cat output $1.pdf
rm $1_*ps
rm $1_*pdf
これで美しい正方形が!
これからTeXのレイアウトなどを調整せねばならぬが、 それはおいおい
参照文献
http://www11.atwiki.jp/physnote/pages/24.html#id_08937a2a
に大変助けられました。
情報まとめ
step1 psファイルを作成する
step2 正方形にする
step3 pdfにする
step1
TeXを使用していたのでここはdvipsで問題ない。
step2
できあがったpsファイルをテキストエディタで開く。
冒頭の
%!PS-Adobe-2.0
を
%!PS-Adobe-2.0 EPSF-2.0
に変更。(バージョンは適当に)
%%DocumentPaperSizes をa4からsquareに変更。
BoundingBoxを正方形にしないと上が適応されない模様。
Step3
オプション
ps2pdf14 -dEPSCrop foo.ps
によって正方形のPDFファイルができるが、BoundingBoxがうまく設定されていない。
しかしPDFのそれを変更する方法が分からなかったので、Step2でできたPSファイルを一ページずつPDFに変換し結合するという方法をとった。これはシェルスクリプトでできる。
以下のようなかんじ
#!/bin/bash
for i in `seq 1 2`
do
psselect -p $i $1.ps $1_00$i.ps
ps2pdf14 -dEPSCrop $1_00$i.ps
done
pdftk $1_[0-9][0-9][0-9].pdf cat output $1.pdf
rm $1_*ps
rm $1_*pdf
これで美しい正方形が!
これからTeXのレイアウトなどを調整せねばならぬが、 それはおいおい
参照文献
http://www11.atwiki.jp/physnote/pages/24.html#id_08937a2a
に大変助けられました。
2011年2月17日木曜日
asirで作業内容を記録する
linuxなら
asir | tee filename
で起動し、
ctrl("echo",1);
で入力内容も出力するようにしてやれば一連の作業内容をfilenameに記録することができる。
asir | tee filename
で起動し、
ctrl("echo",1);
で入力内容も出力するようにしてやれば一連の作業内容をfilenameに記録することができる。
登録:
コメント (Atom)