2007-11-01から1ヶ月間の記事一覧

なんだろう

なんかちょっと違うみたい。 gosh> (define -abc 1) |-abc| gosh> -abc 1なんだろう。 gosh> (define 123a 2) |123a|これもだ。 ちょっと数値の字句解析でハマりちゅう(笑微妙なラインの処理をどうするかがイマイチわからん。先頭がマイナスだったり、数字+…

Schemeをつくろう(3) Boehm GC使ってみた

やっぱSchemeにはGC必要だよね。と思って、Boehm GCを使ってみた。 インストール 以下を参考に。電気系B演習 (言語処理系演習) - Boehm GCの使い方 % ./configure % make % sudo make installインストール完了。あ、Binary Hacksを一読しておくと良いかも。 …

Schemeをつくろう(2) 字句解析と構文解析

字句解析は作ってあったので、昨日作ったリスト部分と結合していきたいと思います。 まず デバッグが容易になるようにファイルと文字ストリームを抽象化したStreamクラスを作りました。 /* stream.h */ struct Stream { union { char *string; FILE *fp; } i…

Schemeをつくろう(1) アトム再考

id:YasuyukiMiuraさんからツッコミを頂いてアトムについて考え直しました。アトムは原子であり割り切れない単位であるので、そこにリスト(対)を含めてしまうのは良くない訳ですよ。アトムが割り切れてしまいます。Schemeの仕様書R5RSには、「アトム」という…

Schemeをつくろう(0) まずはリスト

作ってみないとわからないのがSchemeかと。そんなわけでまったりSchemeを作っていこうと思います。 目的とか Schemeを作る一番の目的はメモリ管理について学ぶこと。 OS自作にも大いに役立つかなぁと思うので。 なるべく仕様に近い形で R5RSを目標に・・・。…

Schemeは空白区切り?

うぅん。コレ。 (define abc"xyz") コンパイルエラーになるかと思って調べてみたら、 gauche % gosh gosh> (define abc"xyz") abc gosh> abc "xyz" gosh> (string-append "abc""def""xyz") "abcdefxyz"アレ? MzScheme % mzscheme Welcome to MzScheme v370 […

はじめてのOz

Oz

なんか「はじめての」ネタが続いてますね(笑 ガウディ本を買ったので、Ozをインストールしてみたけど、「emacs専用」的な印象が強い。しかも、{Browse}が相当イケてないので、コマンドラインで使う方法を模索していこうと思います。 functor import System A…

ガウディ本

昨日、本屋で見かけて即買いしてしまった。コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)作者: セイフ・ハリディ,ピーター・ヴァン・ロイ,Peter Van-Roy,Seif Haridi,羽永洋出版社/メーカ…

はじめてのProcessing

本は買ったけどインストールしてなかったので、Processingをインストールしてみました。Built with Processing ?デザイン/アートのためのプログラミング入門作者: 前川峻志,田中孝太郎出版社/メーカー: ビー・エヌ・エヌ新社発売日: 2007/03/26メディア: 単…

今日知ったワンライナ

青木日記 2007-07-26より。 % echo $RANDOM 21907へぇぇぇ。Manpage of BASH RANDOM このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。 RANDOM に値を代入すると、乱数の列を初期化できます。 ランダムって関数無いなぁ…

SICPを読む(65) マイ図形言語が!!

マイ図形言語が動き始めた!!スゲエ嬉しい。座標系が逆なんだけど。

SICPを読む(64) 問題 2.46 - 2.47 Yanko先生のデバッグ手法

図形言語の実装部分に突入。問題は簡単なので略。僕は図形言語にYanko先生ソースを使ってるんですが、SICPの実装方法とはちょっと違うみたい。ちょっとフレームの定義を見てみる。 まずふつうの。 (define (make-frame origin edge1 edge2) (list origin edg…

KWriteのSchemeモードが激しく可愛すぎる件について

LinuxのエディタといえばEmacsやVimが代表的なんですが、「あんな変態的なエディタは使えない」なんて人も多いんじゃないかと思います。そんなWindowsマンセーな人でも楽しめるエディタが「KWrite」。実は案外高機能。KDEというデスクトップに付属してます。…

SICPを読む(63) 問題 2.45 ラムダ再帰を返したい。

引き続き図形言語。 問題 2.45 (define (split parent child) (define (iter painter n) (if (= n 0) painter (let ((smaller (iter painter (- n 1)))) (parent painter (child smaller smaller))))) iter) 問題は解けたけど、iterを使わず、ラムダ再帰を返…

はじめてのLogo

Logo楽しいかも。 #!/usr/bin/logo to fib :n if :n = 0 [output 0] if :n = 1 [output 1] forward :n * 10 right 90 output (fib :n - 1) + (fib :n - 2) end print fib 15 ; byeとりあえずフィボナッチまで書くことに成功〜。Vimじゃ色が付かないので、構…

SICPを読む(62) 問題 2.44 SICP一番の楽しみ

いよいよSICP一番の楽しみ。図形言語に入ってます。図形言語楽しすぎ。 分割するイメージを掴んだら後は凄く簡単。縦に分割して、横に並べてぇ・・・みたいな。ペタペタ貼っていくだけ。凄く高度な事をやっているはずなのにシンプルなAPIで実現出来てしまう…

Vimでデュアルgrep

Vim

:grepは多用するコマンドのひとつ。 :grep hoge % :copen しかし、Quickfixウィンドウは1個しか持てないのが悩みの種。 もう一個開きたい。 もう一個検索したい。 そこで登場するのがロケーションリスト。ただ単に「l」をつければいい。 :lgrep moge % :lope…

C言語でScheme風オレオレ言語

GCC

なんかオレオレ言語が流行ってるみたいなので、参加してみる。 #include <stdio.h> #include <stdlib.h> #define define(ret, name, args, block) \ ret name args { return block; } #define if(expr, block1, block2) expr ? block1 : block2 #define eq(a, b) a == b #define</stdlib.h></stdio.h>…

カーネルのリンクリスト

GCC

何故かExt2ファイルシステムについて調べてました。ちょっとカーネルのソースを覗いてみたら、struct list_head構造体がやたら出てくる。気になって、include/linux/list.hを覗いてみると、驚くべき仕組みが隠れてた。そんなわけで写経。 #include <stdio.h> struct l</stdio.h>…

前のファイルを開く。

Vim

知らなかった。便利だ。 <C-^> 「:e #」と同意。</c-^>

Vim+Screenプログラミング

Vim

僕の初のVim+Screenプログラミングはやはりコレ。emacsのC-x C-eが欲しい。 if !has('gui_running') function! ScreenSpiritOpen(cmd) call system("screen -X eval split focus 'screen " . a:cmd ."' focus") endfunction function! ScreenEval(str) let s…

Vimperatorでリダイレクトさせる

Vimperatorにコマンドを実行する:!機能があるけど、何故かリダイレクトが使えない。ちょっとターミナルにテキストを送りたいってとき良い方法が無いもんかなぁと。 まず、ターミナルで。ターミナルのptsを確認する。 % tty /dev/pts/4 Vimperatorの:!は残念…

Vimでinfo

Vim

あ、こんな手があった。 % vim -c "set ft=info" /usr/share/info/screen.info.gzinfoはただのテキストファイルなので、直接開いちゃっても問題ない。快適杉。

screen使い始めた。

Konsoleが便利過ぎるので、今まであんまり必要性を感じてなかったけど、screen使い始めた。ウィンドウ分割機能が便利かも。vimヘルプでチートシート作り中。 ============================================================================== SCREEN *scree…

Vim起動時にScratch

Vim

ちょっとEmacs使ってていいなぁと思ったので、kaoriya版VimのScratchを活用してみた。.vimrcに au VimEnter * Scratch | set ft=vim | b 1 いい感じ。ついでに、~/.vim/after/ftplugin/vim.vimあたりに nmap <buffer> <silent> <C-CR> :exe getline(".")<CR> vmap <buffer> <silent> <C-CR> "zy:@z<CR> Ctrl + Ent</cr></c-cr></silent></buffer></cr></c-cr></silent></buffer>…

Vimでeval

Vim

そういえば、Vimには、evalがあるんだ。メモメモ。現在のファイルを新しいウィンドウで開く。 exe eval("'sp ' . expand('%')") おぉぉぉぉ。ユーザー定義だって。 function! Hoge(s) return "ほげ " . a:s endfunction echo eval("Hoge('もげ')") ほげ もげ…

他のウィンドウにコマンドを送りつける

Vim

本日のvimscript。やべぇ。すげぇ可能性を感じた。 " return current window number function! MoveWindow(buf_name, split) let cur = winnr() if !buflisted(a:buf_name) return -1 else let winnr = bufwinnr(a:buf_name) if winnr == -1 if a:split exe …

Vimのプラグインがやたら使えるようになった。

Vim

久しぶりに:GetLatestVimScriptsをしたら、今まで微妙に使いずらかったプラグインが続々更新されたよぉ(嬉 YankRing emacsのkillリングのエミュレーター。pしたら,でyankの履歴が辿れるようになるプラグイン。 Vim7のテキストオブジェクトに対応。yiwとかし…

非同期通信ことはじめ

Pythonで書かれたVim用shellフロントエンドvimshというソースを読んでます。かなり便利なんですが、古いしバグがあるので、修正を加えたり加筆を加えながら使ってます。どうやら補完も出来そうです。vimshの凄いのは、シェルを起動していても、他の作業が出…

僕のキーバインド暗記法

VimperがちょっとEmacsを覚えてます。しかし、チュートリアルどうりにやってもキーバインドが全然頭に入っていかないので、Vimと同じ方法で暗記することにしました。 紙を用意 まず、紙を用意してキーボードの配置を紙に写します。まずは英字を。 C-q C-w C-…