サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
tomapd.hatenadiary.org
結城さんが define-syntax を使った debug マクロ(デバッグプリント - 結城浩のSICP日記 - sicp)を紹介されている。マクロの便利な使い方の好例だと思う。Scheme ではなく、Common Lisp の話になってしまうが、高い評価を受けている Practical Common Lisp という本(オンラインで読める)にもマクロを使った面白い例が 9 章に載っている。その章ではマクロを使ってユニットテストのための簡易ライブラリを作っていくのだが、まだ Lisp のマクロというものがよく分からなかった僕はこの内容にとても感銘を受けた。せっかくなのでこの内容の前半をさらっと簡単に Scheme (Gauche) を使って紹介したいと思う。 本ではまずつぎのようなテスト(関数 + のテスト)を例にしている。 (= (+ 1 2) 3) (= (+ 1 2 3) 6)
Python においてメソッドはユニークな性質を持っており、bound されているか unbound か、明確な違いがある。bound / unbound とは、そのメソッドが特定のインスタンスに属しているか、いないかという言い方が出来ると思う。 class Person(object): def __init__(self, name, age): self.__name = name self.__age = age def get_name(self): return self.__name def get_age(self): return self.__age単純なクラスを定義してみた。このクラスのメソッドを調べてみると、 >>> Person.get_age <unbound method Person.get_age>こちらは unbound となっているが、 >>> p =
Gauche の拡張ライブラリで、自分でクラスを定義する方法、というよりメモとしてのテンプレート。正しい手順か不明だけど、とりあえず動く。 安直だけど、"clos" という名前の拡張ライブラリを書くとして、Scheme で書くと次のような定義になるようにする。 (define-class <person> () ((name :init-value "Anonymous") (age :init-value 20)))拡張ライブラリのヘッダファイル clos.h の宣言。 typedef struct ScmPersonRec { SCM_HEADER; ScmObj name; int age; } ScmPerson; SCM_CLASS_DECL(Scm_PersonClass); #define SCM_CLASS_PERSON (&Scm_PersonClass) #define
libgauche をリンクすればできるみたい。http://www.practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction を参考に、外部の scheme コードをロードして結果を表示するプログラムを書いてみた。 main.c で同じディレクトリにある test.scm をロードして、関数 test を評価。結果は と決めうち。 /* main.c */ #include <stdio.h> #include <gauche.h> ScmObj test() { Scm_Load("./test", 0); ScmObj expr = Scm_ReadFromCString("(test)"); return Scm_Eval(expr, SCM_OBJ(Scm_UserModule())); } int
このページを最初にブックマークしてみませんか?
『tomapd == 22%』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く