2007-11-01から1ヶ月間の記事一覧
なんかちょっと違うみたい。 gosh> (define -abc 1) |-abc| gosh> -abc 1なんだろう。 gosh> (define 123a 2) |123a|これもだ。 ちょっと数値の字句解析でハマりちゅう(笑微妙なラインの処理をどうするかがイマイチわからん。先頭がマイナスだったり、数字+…
やっぱSchemeにはGC必要だよね。と思って、Boehm GCを使ってみた。 インストール 以下を参考に。電気系B演習 (言語処理系演習) - Boehm GCの使い方 % ./configure % make % sudo make installインストール完了。あ、Binary Hacksを一読しておくと良いかも。 …
字句解析は作ってあったので、昨日作ったリスト部分と結合していきたいと思います。 まず デバッグが容易になるようにファイルと文字ストリームを抽象化したStreamクラスを作りました。 /* stream.h */ struct Stream { union { char *string; FILE *fp; } i…
id:YasuyukiMiuraさんからツッコミを頂いてアトムについて考え直しました。アトムは原子であり割り切れない単位であるので、そこにリスト(対)を含めてしまうのは良くない訳ですよ。アトムが割り切れてしまいます。Schemeの仕様書R5RSには、「アトム」という…
作ってみないとわからないのがSchemeかと。そんなわけでまったりSchemeを作っていこうと思います。 目的とか Schemeを作る一番の目的はメモリ管理について学ぶこと。 OS自作にも大いに役立つかなぁと思うので。 なるべく仕様に近い形で R5RSを目標に・・・。…
うぅん。コレ。 (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をインストールしてみたけど、「emacs専用」的な印象が強い。しかも、{Browse}が相当イケてないので、コマンドラインで使う方法を模索していこうと思います。 functor import System A…
昨日、本屋で見かけて即買いしてしまった。コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン・コンピューティング)作者: セイフ・ハリディ,ピーター・ヴァン・ロイ,Peter Van-Roy,Seif Haridi,羽永洋出版社/メーカ…
本は買ったけどインストールしてなかったので、Processingをインストールしてみました。Built with Processing ?デザイン/アートのためのプログラミング入門作者: 前川峻志,田中孝太郎出版社/メーカー: ビー・エヌ・エヌ新社発売日: 2007/03/26メディア: 単…
青木日記 2007-07-26より。 % echo $RANDOM 21907へぇぇぇ。Manpage of BASH RANDOM このパラメータが参照される度に、 0 から 32767 までのランダムな整数が生成されます。 RANDOM に値を代入すると、乱数の列を初期化できます。 ランダムって関数無いなぁ…
マイ図形言語が動き始めた!!スゲエ嬉しい。座標系が逆なんだけど。
図形言語の実装部分に突入。問題は簡単なので略。僕は図形言語にYanko先生ソースを使ってるんですが、SICPの実装方法とはちょっと違うみたい。ちょっとフレームの定義を見てみる。 まずふつうの。 (define (make-frame origin edge1 edge2) (list origin edg…
LinuxのエディタといえばEmacsやVimが代表的なんですが、「あんな変態的なエディタは使えない」なんて人も多いんじゃないかと思います。そんなWindowsマンセーな人でも楽しめるエディタが「KWrite」。実は案外高機能。KDEというデスクトップに付属してます。…
引き続き図形言語。 問題 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楽しいかも。 #!/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一番の楽しみ。図形言語に入ってます。図形言語楽しすぎ。 分割するイメージを掴んだら後は凄く簡単。縦に分割して、横に並べてぇ・・・みたいな。ペタペタ貼っていくだけ。凄く高度な事をやっているはずなのにシンプルなAPIで実現出来てしまう…
:grepは多用するコマンドのひとつ。 :grep hoge % :copen しかし、Quickfixウィンドウは1個しか持てないのが悩みの種。 もう一個開きたい。 もう一個検索したい。 そこで登場するのがロケーションリスト。ただ単に「l」をつければいい。 :lgrep moge % :lope…
なんかオレオレ言語が流行ってるみたいなので、参加してみる。 #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>…
何故かExt2ファイルシステムについて調べてました。ちょっとカーネルのソースを覗いてみたら、struct list_head構造体がやたら出てくる。気になって、include/linux/list.hを覗いてみると、驚くべき仕組みが隠れてた。そんなわけで写経。 #include <stdio.h> struct l</stdio.h>…
知らなかった。便利だ。 <C-^> 「:e #」と同意。</c-^>
僕の初の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にコマンドを実行する:!機能があるけど、何故かリダイレクトが使えない。ちょっとターミナルにテキストを送りたいってとき良い方法が無いもんかなぁと。 まず、ターミナルで。ターミナルのptsを確認する。 % tty /dev/pts/4 Vimperatorの:!は残念…
あ、こんな手があった。 % vim -c "set ft=info" /usr/share/info/screen.info.gzinfoはただのテキストファイルなので、直接開いちゃっても問題ない。快適杉。
Konsoleが便利過ぎるので、今まであんまり必要性を感じてなかったけど、screen使い始めた。ウィンドウ分割機能が便利かも。vimヘルプでチートシート作り中。 ============================================================================== SCREEN *scree…
ちょっと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があるんだ。メモメモ。現在のファイルを新しいウィンドウで開く。 exe eval("'sp ' . expand('%')") おぉぉぉぉ。ユーザー定義だって。 function! Hoge(s) return "ほげ " . a:s endfunction echo eval("Hoge('もげ')") ほげ もげ…
本日の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 …
久しぶりに:GetLatestVimScriptsをしたら、今まで微妙に使いずらかったプラグインが続々更新されたよぉ(嬉 YankRing emacsのkillリングのエミュレーター。pしたら,でyankの履歴が辿れるようになるプラグイン。 Vim7のテキストオブジェクトに対応。yiwとかし…
Pythonで書かれたVim用shellフロントエンドvimshというソースを読んでます。かなり便利なんですが、古いしバグがあるので、修正を加えたり加筆を加えながら使ってます。どうやら補完も出来そうです。vimshの凄いのは、シェルを起動していても、他の作業が出…
VimperがちょっとEmacsを覚えてます。しかし、チュートリアルどうりにやってもキーバインドが全然頭に入っていかないので、Vimと同じ方法で暗記することにしました。 紙を用意 まず、紙を用意してキーボードの配置を紙に写します。まずは英字を。 C-q C-w C-…