Scheme $B%W%m%0%i%_%s%0?MLg(B

back

($B5;=QI>O@Software Design$B;o(B 2000$BG/(B 7$B7n9f(B $B$K7G:\$5$l$?!"!V(BScheme $B$X$N>7BT(B $B!A(B GNU$BI8=`$N%9%/%j%W%H8@8lF~Lg!W$N(B $B5-;v$r2CI.=$@5$7$?$b$N$G$9(B *1)


$B$O$8$a$K(B

$B$_$J$5$s$O(B Lisp $B$r$4B8$8$G$7$g$&$+!#(BLisp $B$O(B 1950$BG/Be8eH>(B*2$B$K(B John McCarthy $B$K$h$C$F(B $B3+H/$5$l$?%W%m%0%i%_%s%08@8l$G!"(B $B$*$b$K5-9f=hM}$J$I$NJ,Ln$G:#$bMxMQ$5$l$F$$$^$9!#(B Scheme $B$O(B Lisp $B$+$iGI@8$7$?8@8l$N$R$H$D$G!"(B Guy Lewis Steele Jr. $B$*$h$S(B Gerald Jay Sussman $B$K$h$C$F(B 1975$BG/$K3+H/$5$l$^$7$?!#(BScheme $B$O$h$/(B $B!V(BLisp $B$NJ}8@!W$J$I$H8F$P$l$^$9$,!"(BLisp $B$h$j$b4JC1$J;EMM(B $B$G!"$=$l$G$$$FJ#;($J%W%m%0%i%_%s%0$,2DG=$J$h$&$K@_7W$5$l$F$$$^$9!#(B $B$I$N%W%m%0%i%_%s%08@8l$K$bD9=j$HC;=j$,$"$j$^$9$,!"(BScheme $B$ND9=j$K$O(B

$B$H$$$C$?$3$H$,$"$j$^$9!#$3$l$K2C$($F!":G6a$G$O(B

$B$H$$$&D9=j$b2C$o$j$^$7$?!#$"$N(B Gimp $B$,(B $BFbB"$7$F$$$k%9%/%j%W%H8@8l$O(B Guile $B$H(B $B8F$P$l$k(B Scheme $B%$%s%?%W%j%?$N0l

$B$H$$$C$?$3$H$,$"$2$i$l$^$9!#:#2s$O!"(BScheme $B$N(B 2$B$D$ND9=j!"!V%"%k%4%j%:%`$r(B $B$9$C$-$j5-=R$G$-$k!W!V%j%9%H=hM}$,$7$d$9$$!W$H$$$&E@$rMxMQ$7$F!"(B $B4JC1$J(B XML $B%Q!<%6$b$I$-$r(B $B@=:n$7$F$_$^$7$g$&!#:#2s$N5-;v$G$ONc$H$7$F(B GNU $B$N(B Guile $B$r(B $B;H$$$^$9$,!"$3$3$K7G:\$7$?%W%m%0%i%`$O(B Scheme $B$NI8=`5,3J$G$"$k(B R5RS $B$K4p$E$$$F$*$j!"$[$H$s$I$N(B Scheme $B ($BCm(B: Windows $B$r$*;H$$$NJ}$O!"(BGuile $B$N$+$o$j$K8e=R$N(B STk $B$r(B $B;H$C$F


Scheme $B$r;H$C$F$_$k(B

$B$G$O(B Scheme $BGuile $B$r(B $B$B3F%_%i!<%5%$%H(B ($BK\2H$O(B ftp://ftp.gnu.org/pub/gnu/guile/) $B$+$iF~

 % ./configure
 % make
 % make install

$B$G%$%s%9%H!<%k$G$-$^$9!#$3$N8e!"%[!<%`%G%#%l%/%H%j$K(B .guile $B$H$$$&(B $B%U%!%$%k$r:n@.$7!"0J2<$N$h$&$K=q$$$F$*$-$^$9(B:

 (use-modules (ice-9 readline))
 (activate-readline)

$B$3$&$7$F$*$/$H!"%3%^%s%I%i%$%sF~NO$K(B readline $B%i%$%V%i%j$r;H$&$?$a(B $BA`:n@-$,8~>e$7$^$9!#$G$O5/F0$7$F$_$^$7$g$&!#(B

 % guile
 guile>

Guile $B$N%W%m%s%W%H$,8=$l$^$7$?!#(BScheme $B$O%$%s%?%W%j%?7?8@8l$G$9$N$G(B C $B$d(B Java $B$J$I$H0c$$!"4pK\E*$K$O%3%s%Q%$%k$r$9$kI,MW$,$"$j$^$;$s!#(B $B%f!<%6$NF~NO$7$?%F%-%9%H$O!"FI$_9~$^$l$k$H$9$0$K

 guile> (* (+ 2 3) 5)
 25

Scheme $B$K$*$$$F$O!V<0$NI>2A(B (evaluation)$B!W$,%W%m%0%i%`$N(* (+ 2 3) 5) $B$H$$$&<0$r%$%s%?%W%j%?$,I>2A$7!"(B25 $B$H$$$&7W;;7k2L$rJV$7$^$7$?!#5-9f!V(B*$B!W$d!V(B+$B!W$J$I$O(B Scheme $B$N4X?tL>$G$9!#(B Scheme $B%$%s%?%W%j%?$O4X?tEEBn$N$h$&$K!"F~NO$5$l$?<0$rI>2A$7$F$O(B $B$=$N7W;;7k2L$rJV$9$H$$$&F0:n$r$R$?$9$i$/$jJV$7$^$9!#$G$O

 guile> (define x 4)  $B!D(B [1]
 guile> (* x 2)       $B!D(B [2]
 8

$B<0(B [1] $B$K$O(B define $B$H$$$&J8;z$,8+$($^$9!#$3$N<0$,I>2A$5$l$k$H!"(B $B%$%s%?%W%j%?$O?7$7$$JQ?t$rDj5A$7$^$9(B (Scheme $B$G$OJQ?t$KCM$rDj5A$9$k(B $B$3$H$r!VB+G{(B (binding)$B!W$H8F$S$^$9(B)$B!#$3$3$G$O<0(B [1] $B$K$h$C$FJQ?t(B x $B$K(B 4 $B$H$$$&?tCM$rB+G{$7!"<0(B [2] $B$G$=$NCM$r;2>H$7$F$$$^$9!#$*5$$E$-$N$h$&$K(B $B<0(B [1] $B$OCM$rJV$7$F$$$^$;$s!#(BScheme $B$K$*$$$F$OJQ?t$rDj5A$9$k$H$$$&(B $BF0:n$d%U%!%$%kF~=PNO$J$I$O!"7W;;$r$9$k$H$$$&$h$j$O$`$7$m4X?t$N(B $BI>2A$K$H$b$J$C$F5/$3$k8=>]$H$_$J$5$l!VI{:nMQ!W$H8F$P$l$^$9!#(B C $B$d(B Java $B$J$IB?$/$N8@8l$G$O$3$N$h$&$JI{:nMQ$r$R$s$Q$s$K(B $B;HMQ$7$^$9$,!"I{:nMQ$O8zN($N$h$$%W%m%0%i%`$r2DG=$K$9$kH?LL!"0U?^$7$J$$(B $B?oH<8=>]$,5/$3$j$d$9$/!"JQ?t$NJQ2=$,DI$$$K$/$$$H$$$&7gE@$r$b$C$F$$$^$9!#(B Scheme $B$G$O$3$&$7$?I{:nMQ$r$J$k$Y$/;H$o$:$K%W%m%0%i%`$,(B $BAH$a$k$h$&$JG[N8$,$J$5$l$F$$$^$9!#(B


Scheme $B$NF0:n(B

$B$G$O(B Scheme $B$N8@8l;EMM$N@bL@$K0\$j$^$7$g$&!#(BScheme $B%$%s%?%W%j%?$N(B $BF0:n$O!"$$$?$C$F4JC1$G$9!#(B

  1. $B:G=i$K!"%$%s%?%W%j%?$OC
  2. $B%$%s%?%W%j%?$OF~NO$5$l$?<0$r(B $B!V(BScheme $B%*%V%8%'%/%H!W$H8F$P$l$kFbItI=8=$KJQ49$9$k!#(B
  3. $B$3$N(B Scheme $B%*%V%8%'%/%H$r0J2<$N5,B'$K=>$C$FI>2A$9$k!#(B Scheme $B%*%V%8%'%/%H$K$O$$$/$D$+$N7?$,$"$j!"%$%s%?%W%j%?$O(B $BF~NO$5$l$?%*%V%8%'%/%H$N7?$K$h$C$FF0:n$rJQ$($k(B ($B?^(B1):
    1. $B%*%V%8%'%/%H$,?tCM7?$dJ8;zNs7?$J$i$P!"$=$l<+?H$rJV$9!#(B
    2. $B%*%V%8%'%/%H$,%7%s%\%k7?$J$i$P!"%$%s%?%W%j%?$O$=$l$r(B $BJQ?tL>$H2r
    3. $B%*%V%8%'%/%H$,%j%9%H7?$J$i$P!"%$%s%?%W%j%?$O$^$:(B $B$=$NMWAG$9$Y$F$r:F5"E*$KI>2A$9$k!#$3$N$H$-(B $B%j%9%H$N@hF,MWAG$,4X?t7?$J$i$P!"(B $B;D$j$NMWAG$9$Y$F$r0z?t$H$7$F$=$N4X?t$r8F$S=P$7!"$=$NCM$rJV$9!#(B
  4. $BI>2A$7$?CM$rI=<($7!"(B1. $B$K$b$I$k!#(B


$B?^(B 1 $B!V<0$NI>2A!W(B

$B@h$[$I$NNc$G8+$F$_$^$7$g$&!#(B(* (+ 2 3) 5) $B$H$$$&<0$,(B $BF~NO$5$l$k$H!"(BScheme $B%$%s%?%W%j%?$O$^$:$3$3$+$i%a%b%j>e$K(B $B%j%9%H7?%*%V%8%'%/%H$r(B $B:n$j$^$9!#$3$N%j%9%H$K$OMWAG$H$7$F!V(B*$B!W!V(B(+ 2 3)$B!W(B $B!V(B5$B!W$J$I$N%*%V%8%'%/%H$,(B $B4^$^$l$F$*$j!"(B (+ 2 3) $B$O$^$?$b$d%j%9%H7?$K$J$C$F$$$^$9!#(B $B%*%V%8%'%/%H$N7?$O!"$=$N(B $B;z6gE*$JFCD'$+$i7h$a$i$l$^$9!#!V(B5$B!W$d!V(B2$B!W$O(B $B?t;z$G;O$^$C$F$$$k$N$G?tCM7?$H$_$J$5$l!"!V(B*$B!W$d!V(B+$B!W(B $B$*$h$SJQ?t$rI=$9!V(Bx$B!W$J$I$O$9$Y$F%7%s%\%k7?$G$9(B (Scheme $B$G$O%"%k%U%!%Y%C%H$G$J$$J8;z$b%7%s%\%k$K4^$`$3$H$,$G$-$^$9(B)$B!#$3$N(B $BF~$l;R$K$J$C$?%j%9%H$rI>2A$9$k$?$a$K!"%$%s%?%W%j%?$O$^$:(B 3-c. $B$N5,(B $BB'$rE,MQ$7!"!V(B*$B!W!V(B(+ 2 3)$B!W!V(B5$B!W$N(B $B3F%*%V%8%'%/%H$r$=$l$>$l:F5"E*$K(B $BI>2A$7$h$&$H$7$^$9!#$^$:FbB&$N%j%9%H(B (+ 2 3) $B$r@h$K9M$($^$7$g$&!#(B $B$3$N%j%9%H$N3FMWAG$O2A$5$l$^$9(B:

$B%7%s%\%k!V(B+$B!W(B $B"M(B $B4X?t!VB-$7;;$r$9$k!W(B($B5,B'(B 3-b.)
$B?tCM!V(B2$B!W(B $B"M(B $B?tCM!V(B2$B!W(B ($B5,B'(B 3-a.)
$B?tCM!V(B3$B!W(B $B"M(B $B?tCM!V(B3$B!W(B ($B5,B'(B 3-a.)

$B$3$N%j%9%H$N@hF,MWAG$O4X?t7?%*%V%8%'%/%H$K$J$j$^$9!#(BScheme $B$G$O(B $B4X?tL>$HJQ?tL>$O6hJL$5$l$^$;$s!#$3$l$O(B Scheme $B%$%s%?%W%j%?$K$h$C$F(B $B$?$^$?$^:G=i$K!VB-$7;;$r$9$k!W$H$$$&AH$_9~$_4X?t$,(B $B!V(B+$B!W$H$$$&%7%s%\%k$KB+G{$5$l$F$$$?$@$1$G!"$3$N(B $B%7%s%\%k$K8e$+$i?tCM$rB+G{$7$F$d$l$P!"!V(B+$B!W$H$$$&%7%s%\%k$O(B $BJQ?t$H$7$F;H$&$3$H$b$G$-$^$9!#(BScheme $B$N4X?t$O!"?tCM$d(B $BJ8;zNs$HF1$8$h$&$K%*%V%8%'%/%H$H$7$F07$o$l$F$$$k$N$G!"$3$N$h$&$J(B $B7]Ev$,$G$-$k$N$G$9!#$5$F(B Scheme $B%$%s%?%W%j%?$O$3$N!V(B2$B!W$H!V(B3$B!W$H$$$&(B 2$B$D$N%*%V%8%'%/%H$r!VB-$7;;$r$9$k!W4X?t$KEO$7!"$=$NJV$jCM$r(B $BF@$^$9!#$3$l$r4X?t$N!VE,MQ(B (application)$B!W$H8F$S$^$9!#(B $B$3$N4X?t$O?tCM7?%*%V%8%'%/%H!V(B5$B!W$rJV$7$^$9!#$3$3(B $B$GCm0U$7$F$$$?$@$-$?$$$N$O!"!V(B+$B!W$H$$$&J8;zI=8=$,I=$7$F$$$k$b$N$O(B $B$"$/$^$G%7%s%\%k7?$G$"$C$F4X?t7?$G$O$J$$$H$$$&$3$H$G$9!#%7%s%\%k(B $B7?%*%V%8%'%/%H$OJ8;zI=8=$r$b$C$F$$$F%f!<%6$,D>@\8+$?$jF~NO$7$?$j$G(B $B$-$^$9$,!"4X?t7?%*%V%8%'%/%H$O$=$N$h$&$JJ8;zI=8=$r$b$C$F$$$^$;$s!#(B $B%f!<%6$O%7%s%\%k$rI>2A$9$k$3$H$K$h$C$F$N$_!"4X?t7?%*%V%8%'%/(B $B%H$r

$B$H$K$+$/!"$3$N$h$&$K$7$F<0(B (+ 2 3) $B$rI>2A$7$?CM$G$"$k?tCM(B $B!V(B5$B!W$,F@$i$l$^$7$?!#$3$N$h$&$KI>2A$O:F5"E*$K9T$o$l!"(B $B:G=*E*$K$O%j%9%H(B (* (+ 2 3) 5) $B$N3FMWAG$,2A$5$l$k$3$H$K$J$j$^$9(B:

$B%7%s%\%k!V(B*$B!W(B $B"M(B $B4X?t!V$+$1;;$r$9$k!W(B($B5,B'(B 3-b.)
$B%j%9%H!V(B(+ 2 3)$B!W(B $B"M(B $B?tCM!V(B5$B!W(B ($B5,B'(B 3-c.)
$B?tCM!V(B5$B!W(B $B"M(B $B?tCM!V(B5$B!W(B ($B5,B'(B 3-a.)

$B$3$N8e$+$1;;$N4X?t8F$S=P$7$,9T$o$l!"L5;v$K(B (* (+ 2 3) 5) $B$,(B $BI>2A$5$l$k$H$$$&$o$1$G$9!#(B

$B$5$F!"(BScheme $B$N<0$O$[$I$s$I$,0J>e$N$h$&$J2A$5$l$k$N$G$9$,!"(B $BNc30$b$"$j$^$9!#$=$l$,$?$H$($P@h$K$"$2$?(B define $B$N>l9g$G$9!#%j%9%H(B $B$N@hF,MWAG$,(B define $B$@$H!"(B Scheme $B$O(B 2$BHVL\$NMWAG(B ($B$3$NNc$G$O(B x $B$H$$(B $B$&%7%s%\%k(B) $B$rI>2A$7$^$;$s!#(B2$BHVL\$NMWAG$O%7%s%\%k$N$^$^$G07$o$l!"(B $B$3$N%7%s%\%k$K(B 3$BHVL\$NCM$,B+G{$5$l$k$N$G$9!#$3$N$h$&$JFCdefine $B$N$h$&$J$h$/;H$o$l$kBeI=E*$J9=J8(B $B$r3P$($kI,MW$,$"$j$^$9!#(B


$B4X?tDj5A$H@)8f9=B$(B

Scheme $B$N$b$&$R$H$D$NFCD'$O!"7+$jJV$7$d%k!<%W9=B$$r$9$Y$F(B $B!V:F5"8F$S=P$7(B (recursive call)$B!W$K$h$C$Fn $B$N3,>h(B n! $B$r7W;;$9$k4X?t(B fact $B$rDj5A$7$F$_$^$7$g$&(B:

 guile> (define fact
 ...      (lambda (n) (if (= n 0) 1
 ...                      (* (fact (- n 1)) n))))
 guile> (fact 5)
 120

Scheme $B$G$O4X?t$b$R$H$D$N%*%V%8%'%/%H$J$N$G!"4X?t$rDj5A$9$k$H(B $B$-$bJQ?t$NDj5A$HF1$8(B define $B$r;H$$$^$9!#$?$@$7$3$N>l9g$OJQ?t$K?tCM(B $B7?$dJ8;zNs7?%*%V%8%'%/%H$rB+G{$9$k$N$G$O$J$/$F!"4X?t7?%*%V%8%'%/(B $B%H$rB+G{$7$^$9!#$7$+$7!"A0=R$7$?$h$&$K4X?t7?%*%V%8%'%/%H$O%f!<%6(B $B$,D>@\%-!<%\!<%I$+$iF~NO$9$k$3$H$O$G$-$^$;$s!#$3$N$?$a$K(B Scheme $B$K(B $B$O(B lambda $B$H$$$&FCJL$J9=J8$,MQ0U$5$l$F$$$^$9(B:

 (lambda ($B%7%s%\%k(B1 $B%7%s%\%k(B2 ... $B%7%s%\%k(Bm) $B<0(B1 $B<0(B2 ... $B<0(Bn)

lambda $B9=J8$,I>2A$5$l$k$H!"(B $BM?$($i$l$?>pJs$+$i?7$7$/4X?t7?%*%V%8%'%/%H$,(B $B$D$/$i$l!"JV$5$l$^$9!#$3$N4X?t$O(B m$B8D$N0z?t$r$H$j!"<0(B 1 $B$+$i(B $B<0(Bn $B$^$G$r$3$N=g=x$GI>2A$7$?$"$H!":G8e$N<0(B n $B$N(B $BCM$r$3$N4X?t$NCM$H$7$FJV$9$h$&$J$b$N$K$J$C$F$$$^$9!#(B $BEO$5$l$?0z?t$O%m!<%+%kJQ?t$H$7$F!"(B $B$=$l$>$l(B $B%7%s%\%k(B1 $B$+$i(B $B%7%s%\%k(Bm $B$KB+G{$5$l$^$9!#(BC $BIw$K=q$/$H(B:

 (define newproc (lambda (a b c) (proc1 a) (proc2 b) (proc3 c)))

$B$O!"(B

 newproc(a, b, c)
 {
   proc1(a);
   proc2(b);
   proc3(c);
 }

$B$H$$$&4X?tDj5A$r$*$3$J$&$N$HF1$8$H9M$($k$3$H$,$G$-$^$9!#$3$N4X?t(B fact $B$OFbIt$G>r7oJ,4t$r$*$3$J$$!"(B n $B$NCM$,(B 0 $B$N$H$-$O(B 1 $B$rJV$7!"(B $B$=$l0J30$N$H$-$O$5$i$K<+J,<+?H$r:F5"E*$K8F$S=P$7$F$$$^$9!#(Bif $B$O(B $B>r7oJ,4t$r$*$3$J$&9=J8$G$9(B:

 (if $B<0(B1 $B<0(B2 $B<0(B3)

$B$^$:<0(B1 $B$rI>2A$7$?$"$H!"$=$N7k2L$,??$J$i$P<0(B2 $B$,!"56$J$i$P<0(B3 $B$,I>(B $B2A$5$l!"$=$NCM$,JV$5$l$^$9!#$3$l$O(B C$B8@8l$K$*$1$k(B ? $B1i;;;R$K(B $B;w$F$$$^$9!#4X?t(B (= x y) $B$O(B $BM?$($i$l$?(B 2$B$D$N?tCM(B x $B$H(B y $B$,Ey$7$1(B $B$l$P(B #t$B!"$=$&$G$J$1$l$P(B #f $B$N(B $B??M}CM7?%*%V%8%'%/%H$rJV$7$^$9(B($B$7$+$7!"<0(B1 $B$NCM$O$Y$D$K(B $B??M}CM7?$G$J$/$F$b$+$^$$$^$;$s!#(BScheme $B$G$O(B #f $B0J30$NCM$O(B $B7?$K$+$.$i$:!"$9$Y$F??$H$_$J$5$l$k$+$i$G$9(B)$B!#$3$N$h$&$K$7$F(B fact $B$O(B n $B$r8:$i$7$J$,$i<+J,<+?H$r7+$jJV$78F$S=P$7$F7W;;$r9T$$$^$9!#(B

$B$7$+$7!":F5"8F$S=P$7$O$U$D$&(B 1$B2s$N8F$S=P$7$4$H$K%a%b%j>e$N%9%?%C%/(B $BNN0h$r>CHq$9$k$?$a!"L58B$K<+J,<+?H$r8F$S=P$7$D$E$1$k$3$H$O$G$-$^$;$s!#(B $B$3$l$r2r7h$9$k$?$a$K(B Scheme $B$G$O!VKvHx:F5"(B (tail recursion)$B!W$H(B $B8F$P$l$k7A<0$r%5%]!<%H$7$F$*$j!"L58B$KB3$/:F5"8F$S=P$7$r2DG=$K$7$F$$$^$9!#(B $B0J2<$NNc$r8+$F$/$@$5$$(B:

 guile> (define fact-tail
 ...      (lambda (n x) (if (= n 0) x 
 ...                        (fact-tail (- n 1) (* n x)))))
 guile> (fact-tail 5 1)
 120
$B4X?t(B fact-tail $B$b(B fact $B$HF1$8$h$&$K(B $B3,>h$r7W;;$9$k4X?t$G$9$,!"(B $B$3$A$i$O(B fact $B$H0c$$KvHx:F5"$r;HMQ$7$F$$$^$9!#KvHx:F5"$H$O!"!V<+J,(B $B<+?H$N8F$S=P$7$,4X?t$N:G8e$KI>2A$5$l$k!W$h$&$J:F5"8F$S=P$7$r$$$$(B $B$^$9!#>e$NNc$G$O!"(Bfact-tail $BCf$G8F$S=P$7$F$$$k(B $B!VFbB&$N(B fact-tail$B!W(B $B$NJV$jCM$=$N$b$N$,!"$3$N!V30B&$N(B fact-tail $B$NJV$jCM!W$K$J$j$^$9$N(B $B$G!"JV$jCM$r3P$($F$*$/$?$a$K%9%?%C%/$r>CHq$7$J$/$F$b$h$$$N$G$9!#(B Scheme $B$N5,3J(B R5RS $B$K$O(B $B!VKvHx:F5"$r;H$($P!":F5"8F$S=P$7$Ofact-tail $B$,$I$N$h$&$KF0$/$N$+9M$($F$_(B $B$F$/$@$5$$!#(B

XML $B%Q!<%6$b$I$-$r:n$k(B

$B$3$3$+$i$OXML $B%Q!<%6$b$I$-(B parsexml.scm $B$r;H$C$F@bL@$r?J$a(B $B$F$$$-$^$9!#(BXML $B$N8@8l9=B$$O%?%0$G0O$^$l$?%F%-%9%H$NCf$K$5$i$K%?%0(B $B$,$"$j!D$H$$$&6q9g$KF~$l;R9=B$$r$J$7$F$$$^$9!#$3$l$O7W;;5!2J3X$G(B $B!VLZ(B (tree) $B9=B$!W$H8F$P$l$k$b$N$G$9(B ($B?^(B2)$B!#(B


$B?^(B2 $B!V(BXML $B8@8l$NLZ9=B$!W(B

$B$7$?$,$C$F$3$N%G!<%?9=B$$H$7$F%j%9%H7?%*%V%8%'%/%H$r;H$($P!"(BScheme $B$G8zN($N$h$$A`:n$,9T$($=$&$G$9!#$J$K$O$H$b$"$l$^$:% guile -l parsexml.scm $B$HF~NO$9$k$3$H$K$h$jD>@\

 guile> (load "parsexml.scm")

$B%U%!%$%k$+$i%W%m%0%i%`$rFI$_9~$`>l9g!"(BScheme $B%$%s%?%W%j%?$O$3$l$i(B $B$N<0$,$"$?$+$b$3$N=g=x$GC(define last-char ...)$B!W$NIt(B $BJ,$,I>2A$5$l$k$o$1$G$9!#!V(B;$B!W0J9_$O%3%a%s%H$H$7$F07$o$l$^$9!#(B parsexml.scm $B$r(B $B%m!<%I$9$k$H4X?t(B parse-xml-file $B$,(B $BDj5A$5$l$^$9$,!"$3$l$O%U%!%$%kL>$r0z?t$H$7$FM?$($k$H!"(B $B$=$NLZ9=B$$r%j%9%H$H$7$FJV$9$h$&$J4X?t$G$9!#(B $B$?$H$($P%U%!%$%k(B test.xml $B$N(B $B!VLZ!W$rJQ?t(B tree1 $B$KB+G{$9$k$K$O

 guile> (define tree1 (parse-xml-file "test.xml"))
 guile> tree1
 (<document> (<title> "sample") (<section> "section" "1")
 (<section> "section" "2" (<subsection> "subsection")))

<document>
 <title> sample </title>
 <section> section 1 </section>
 <section> section 2 
   <subsection> subsection </subsection>
 </section>
</document>
$B%U%!%$%k(B test.xml $B$NCf?H(B

$B$3$N%j%9%H$OF~$l;R$K$J$C$F$$$F!"(BXML $B$N%?%0$O%j%9%H$N@hF,$K$=$l$>$l(B <document> $B$J$I$N%7%s%\%k7?%*%V%8%'%/%H$H$7$FI=8=$5$l!"O(B $B$O5-9f(B "$B!A(B" $B$G0O$^$l$F$$$kJ8;zNs7?%*%V%8%'%/%H$H$7$FI=8=$5$l$F$$$^(B $B$9!#$D$.$KF1$8$/(B parsexml.scm $BCf$GDj5A$5$l$F$$$k4X?t(B search-xml $B$r;H$C$F!"(B $B$3$N(B tree1 $B$+$i(B <subsection> $B%?%0$r(B $B$b$DItJ,LZ$@$1$rH4$-=P$7$F$_$^$7$g$&(B:

 guile> (search-xml (lambda (t) (eq? '<subsection> (car t))) tree1)
 ((<subsection> "subsection"))

$B4X?t(B search-xml $B$O!"(B $B0z?t$H$7$F8!:wBP>]$NLZ$H!"$R$H$D$N4X?t%*%V%8%'%/%H$r$H$j$^$9!#(B search-xml $B$OM?$($i$l$?>r7o$r$_$?$9$h$&$J(B $BItJ,LZ$9$Y$F$r(B tree1 $B$+$iC5$7$@$7$F$/$k$N$G$9$,!"(B $B$3$N4X?t$NJXMx$J$H$3$m$O(B $B$=$N8!:w>r7o$H$7$F$J$s$i$+$NCM$dJ8;zNs$rM?$($F$k$N$G$O$J$/!V>r7o$rK~(B $B$?$9$H$-$K??$rJV$9$h$&$J4X?t!W$rM?$($F$$$k$3$H$G$9!#$3$3$G(B lambda $B9=J8$K$h$C$F:n$i$l$F$$$k4X?t$O0z?t(B t $B$K(B 1$B$D$NItJ,LZ(B ($B%j%9%H(B) $B$r$H$j!"$=$l$,8!:w>r7o$r$_$?$9$H$-!"(B $B$D$^$j$3$3$G$O%j%9%H$N@hF,$K(B <subsection> $B%7%s%\%k$,(B $B$D$$$F$$$k$H$-$K??$rJV$7$^$9!#(Bsearch-xml $B$O(B $B%j%9%H(B tree1 $BCf$NMWAG$R$H$D$R$H$D$r$3$N4X?t$KEO$7!"$=$l$,??$rJV$9(B $BMWAG$N$_$r%T%C%/%"%C%W$7$F%j%9%H$K$7$^$9!#$3$l$O7k2L$H$7$F!V%j%9%H(B $B$N%j%9%H!W$K$J$j$^$9$N$G!"$3$N7k2L$K$O3g8L$,(B 2$B=E$K$D$$$F$$$^$9!#4X(B $B?t$r%*%V%8%'%/%H$H$7$F;H$&$3$H$K$h$C$F!"9%$_$K1~$8$?JL$N4X?t$r4{B8(B $B$N4X?t(B search-xml $B$K!HKd$a9~$`!I$3$H$,$G$-$k$N$G$9(B ($B?^(B3)$B!#(B


$B?^(B3 $B!V4X?t%*%V%8%'%/%H$rKd$a9~$`!W(B

$B$3$3$G;H$o$l$F$$$k4X?t(B eq? $B$O(B 2$B$D$N%7%s%\%k$,Ey$7$$$H$-$K??$rJV$9AH$_9~$_4X?t$G$"$j!"(B car $B$O%j%9%H$N@hF,$NMWAG$@$1$r$H$j$@$9AH$_9~$_4X(B $B?t$G$9!#(Bparse-xml-file $B$K$h$C$FJV$5$l$?7A<0$G$O!"(B $B%j%9%H$N@hF,$NMWAG$O$D$M$K%?%0$rI=$9%7%s%\%k$K$J$C$F$$$^$9$+$i!"(B $B@hF,$N%7%s%\%k$,(B <subsection> $B$K(B $BEy$7$$$+$I$&$+$rD4$Y$l$P!"$3$N%j%9%H(B t $BA4BN$,(B $B3:Ev$9$k$b$N$+$I$&$+$o$+$j$^$9!#(B<subsection> $B%7%s%\%k$NA0$K$D$$$F$$$k!V(B'$B!W$H$$$&5-9f$O%7%s%\%k$N0lIt$G$O$J$/!"(B $B$3$N%7%s%\%k$r!V0zMQ$9$k(B (quote)$B!W$3$H$rI=$7$F$$$^$9!#(B Scheme $B$N5,B'$G$O$U$D$&%7%s%\%k$O<+F0E*$K$=$NJQ?t$NCf?H$K(B $BI>2A$5$l$F$7$^$$$^$9$,!"$3$3$G$O4X?t(B eq? $B$K(B $B%7%s%\%k7?$N%*%V%8%'%/%H$=$N$b$N$r(B $BDj?t$H$7$FEO$7$?$$$N$G$"$C$F!"$=$N%7%s%\%k$rI>2A$7$?FbMF$rEO$7$?$$(B $B$o$1$G$O$"$j$^$;$s!#$7$?$,$C$F!"$3$N$h$&$K%7%s%\%k$rI>2A$5$;$J$$9)(B $BIW$,I,MW$K$J$j$^$9!#F1$8$h$&$K%j%9%H7?%*%V%8%'%/%H$b(B $B!V(B'$B!W(B $B$r;H$&$3$H(B $B$K$h$C$F!"I>2A$5$;$:$KDj?t$H$7$F07$&$3$H$,2DG=$K$J$j$^$9!#(B

search-xml $B$K4X?t$rEO$;$k$H$$$&MxE@$O!"(B $B$8$D$O$+$J$j6/NO$G$9!#$3$l$K$h$C$F(B $B8!:w%k!<%A%s$r:n$j$J$*$9$3$H$J$7$K!"$I$s$JJ#;($J>r7o$G$b8!:w$5$;$k$3$H$,(B $B$G$-$^$9!#

 guile> (define is-a? (lambda (tag t) (eq? tag (car t))))
 guile> (search-xml
 ...     (lambda (t1)
 ...       (and (is-a? '<section> t1)
 ...            (not (null? (search-xml 
 ...                   (lambda (t2) (is-a? '<subsection> t2)) t1)))))
 ...     tree1)
  ((<section> "section" "2" (<subsection> "subsection")))

$B$3$l$O!V(B<subsection> $BLZ$r:GDc$R$H$D4^$`$h$&$J(B <section> $BLZ!W$r8!:w$7$?$H$3$m$G$9!#(B $B30B&$N(B search-xml $B$KM?$($i$l$k4X?t$O!V%j%9%H(B t1 $B$,(B <section> $B%?%0$r$b$A!"$5$i$K%j%9%H(B t1 $BCf$K(B $B!X(B<subsection> $B$r$b$D$h$&$J%j%9%H!Y$,(B $B$_$D$+$l$P??$rJV$9!W$H$$$&$b$N$G$9!#AH$_9~$_4X?t(B and $B$O(B2$B$D0J>e$N??M}CM$NO@M}@Q$r5a$a!"(Bnot $B$O??M}CM$rH?E>$5$;$^$9!#(B null? $B$O$=$N0z?t$,MWAG$r$b$?$J$$!V6u!W%j%9%H(B () $B$G$"$k$+$I$&$+$N8!::$G$9!#$3$N4X?t$O$5$i$KFbIt$G(B search-xml $B$r8F$S=P$7$F$$$^$9$,!"(B(not (null? (search-xml ...))) $B$H$$$&ItJ,$O(B search-xml $B$N(B $B8!:w7k2L$,6u%j%9%H$G$J$$!"$D$^$j:GDc$R$H$D$O(B <subsection> $B%?%0$r$U$/$`LZ$,$"$k$+$I$&$+$r%F%9%H$7$F$$$k$3$H$K$J$j$^$9!#(B Scheme $B%W%m%0%i%_%s%0$GHs>o$K6/NO$J$N$O$3$N$h$&$K(B $BI,MW$K1~$8$F$=$N>l$G4X?t$r@8@.$7!"$9$0;HMQ$G$-$k$3$H$G$9!#(B $B$3$NNc$G$O!"FbB&$N(B search-xml $B$,8F$S(B $B=P$5$l$k$?$S$K?7$7$$4X?t%*%V%8%'%/%H$,@8@.$5$l$F$$$k$3$H$K$J$j$^$9!#(B SQL $B$r$4B8$8$NJ}$J$i!"$3$N$h$&$J=q$-J}$O(B SQL $B$K$*$1$k(B SELECT $BJ8$K;w$F$$$k$H(B $B;W$o$l$k$+$b$7$l$^$;$s!#(B Scheme $B$G$O$3$N$h$&$K!V4X?t%*%V%8%'%/%H$r0z?t$H$7$F


$B%W%m%0%i%`$N@bL@(B

$B$3$N%W%m%0%i%`(B parsexml.scm $B$N(B $B4JC1$J@bL@$r$7$F$*$-$^$9!#(B $B:G=i$K;z6g2r@O$r$*$3$J$&%k!<%A%s$,$"$j!"$3$3$G%U%!%$%k$+$iJ8;zNs$rFI$_=P$7!"(B $B$=$l$r$$$/$D$+$N!V%H!<%/%s(B (token)$B!W$H8F$P$l$kJ8;zNs7?%*%V%8%'%/%H$K(B $B@Z$jJ,$1$F$$$^$9!#$3$3$G$O4JC1$N$?$a!"$9$Y$F$N%F%-%9%H$O1Q?t;z$G(B $B$"$k$H$7!"%?%0$H%F%-%9%H$N4V$K$O$+$J$i$:6uGr$"$k$$$O2~9T$,$O$5$^$l(B $B$k$H2>Dj$7$F$$$^$9!#:G=i$N(B 3$B$D$N4X?t(B last-char, begin-tag?, end-tag? $B$O(B $B@Z$jJ,$1$i$l$?J8;zNs%*%V%8%'%/%H$,(B $B!V(B<$B!A(B>$B!W$"$k$$$O!V(B</$B!A(B>$B!W$H$$$&7A$r(B $B$7$F$$$k$+$I$&$+H=Dj$7!"$b$7$=$&$J$i$P$=$NJ8;zNs$r%7%s%\%k$K(B $BJQ49$7$FJV$9$H$$$&4X?t$G$9!#J8;zNs$rA`:n$9$k$?$a$K(B string-length $B$d(B string-ref, string-append, substring $B$H$$$C$?AH$_9~$_4X?t$r;H$C$F$$$^$9!#(B #\< $B$d(B #\> $B$OJ8;z7?$NDj?tI=8=(B $B$G!"(Bstring-ref $B$K$h$C$FJ8;zNs7?%*%V%8%'%/%H$NG$0U$N0LCV$+$iJ8;z7?(B $B%*%V%8%'%/%H$r

$BCmL\$7$F$$$?$@$-$?$$$N$O(B begin-tag? $B$H(B end-tag? $BN>J}$G(B $B;H$o$l$F$$$k(B and $B9=J8$N;H$$J}$G$9!#(Band $B9=J8$O(B $B:8$+$i0z?t$rI>2A$7$F$$$-$^$9$,!"7k2L$,H=L@$7$?;~E@$N0z?t$rJV$7$^$9!#(B Scheme $B$K$*$$$F$O??M}CM7?$N(B #f $B0J30$N(B $B%*%V%8%'%/%H$O$9$Y$F??$H2rand $B$O:G8e$^$G(B $BI>2A$,?J$`$H??M}CM$N$+$o$j$K%7%s%\%k$rJV$9$h$&$K$J$C$F$$$^$9!#$3$N(B $B$h$&$K(B Scheme $B%W%m%0%i%_%s%[email protected]$7$?$H$-$K$=$NCM$rJV$7!"<:GT$7(B $B$?$H$-$O(B #f $B$rJV$9$h$&$K$7$F$*$/$HJXMx$G$9!#(B

get-token1 $B$G$O!"%U%!%$%k$+$iJ8;z$rFI$_9~$`$N$K(B read-char $B4X?t$d(B eof-object? $B4X?t!"$=$7$F!V%]!<%H(B (port) $B7?!W$N(B $B%*%V%8%'%/%H$r07$C$F$$$^$9!#$3$l$O(B C $B$G$$$&$H$3$m$N(B FILE $B9=B$BN$N$h$&$J$b$N$H(B $B;W$C$F$/$@$5$$!#$5$i$K!"$3$3$G$O%j%9%HA`:n$N=EMW$J4X?t(B cons $B$r;HMQ$7$F(B $B$$$^$9!#(Bcons $B$O0J2<$NNc$N$h$&$K!V%j%9%H$N@hF,$K?7$7$$MWAG$r$R$H$D(B $BDI2C$7$?%j%9%H!W$rJV$7$^$9(B:

 guile> (cons 'a '(b c))
 (a b c)

$B$7$+$7!"(Bcons $B$r;H$C$FMWAG$rDI2C$7$F$$$/$H!":G=*E*$K%j%9%H$N=g=x$O(B $BDI2C$7$?=g=x$H5U$K$J$C$F$7$^$$$^$9!#$3$l$r85$K$b$I$9$?$a$K4X?t(B reverse $B$,;H$o$l$F$$$^$9!#(Blet* $B$H$$$&9=J8$O(B $B0l;~E*$K;HMQ$9$k%m!<%+%kJQ?t$rB+G{$7!"(B $B?7$?$JJQ?t%9%3!<%W$r:n@.$7$^$9!#$^$?(B cond $B9=J8$K$h$C$F(B $B>r7oJ,4t$r$$$/$D$bJB$Y$?$h$&$K=q$/$3$H$,$G$-$^$9!#(B


$B3FR2p(B

$B:G8e$K!"$3$3$GR2p$7$^$9!#$3$l$i$O$I$l$b4pK\E*$K%*!<%W%s%=!<%9$G8x3+$5$l$F$*$j!"(B $B%f!<%6$,%U%j!<$GF~o(B $B$KIO

$B$^$:(B Scheme $B$N%[!<%`%Z!<%8$H$b$$$($k(B URL $B$r>R2p$7$^$9!#(BR5RS $B$r$O$8(B $B$a$H$9$k3F http://www.swiss.ai.mit.edu/projects/scheme/index.html
$BF|K\$G$O!"(B $BIY;3Bg3X$NLZB<(B $B4`$5$s$N%Z!<%8(B $B$,Am9g:w0z$H$7$F$*$9$9$a$G$9!#(B

Scheme $B$N8@8l;EMM$H$7$F$D$M$KO$NMQ8l$b$[$\$3$NLu$K=>$$$^$7$?(B: http://tanaka-www.cs.titech.ac.jp/%7Eeuske/scm/r5rs.html

SCM $B$O(B Aubrey Jaffer $B;a$K$h$C$F8x3+$5$l$F$$$k(B Scheme $B%$%s%?%W%j%?(B $B$G!"e$G6&DL$N%3!<%I$rAv$i$;$k$?$a$N(BScheme $B%3!<(B $B%I$G$9!#(BSCM $B$K$O(B Hobbit $B$H8F$P$l$k%3%s%Q%$%i$bMQ0U$5$l$F$$$^$9!#(B http://swissnet.ai.mit.edu/~jaffer/SCM.html

STk $B$O(B Scheme $B4X?t$+$i(B Tk $B$N%$%s%?!<%U%'%$%9$r;H$($k$h$&$K$7$?%$(B $B%s%?%W%j%?$G!"(BErick Gallesio $B;a$K$h$C$F8x3+$5$l$F$$$^$9!#(BTk $B$r;H$C(B $B$?%0%i%U%#%+%k$J3+H/4D6-$,IUB0$7$F$*$j!"(BWindows $B$G$bF0:n$7$^$9!#$[(B $B$+$K$b@55,I=8=$K$h$k%Q%?!<%s%^%C%A%s%0$d%=%1%C%HDL?.!"(BC $B$G:n@.$7$?(B $B%i%$%V%i%j$N%@%$%J%_%C%/%j%s%/$J$IB?$/$N5!G=$r$=$J$($F$$$^$9!#(B http://kaolin.unice.fr/STk/STk.html
($BCm(B: STk $B$O$3$A$i$K$b%_%i!<$7$F$*$-$^$7$?!#(Bftp://tanaka-www.cs.titech.ac.jp/home/euske/STk/ $B$J$*!"(BSTk $B$O?7;3$,8&5f>e$N%7%9%F%`$r9=C[$9$k%W%i%C%H%U%)!<%`$H$7$F$b(B $B;H$C$F$$$^$9!#>\$7$/$O(B Kairai $B%[!<%`%Z!<%8(B $B$r$I$&$>(B)

Bigloo $B$O(B Manuel Serrano $B;a$K$h$C$F8x3+$5$l$F$$$k(B Scheme $B%3%s%Q%$(B $B%i$G!"(BScheme $B%=!<%9%3!<%I$r(B C $B$KJQ49$7$F%P%$%J%j$r@8@.$7$^$9!#%3%s(B $B%Q%$%i$N>l9g!"(BScheme $B$N%a%j%C%H$,$9$Y$F5|e$G$"$j!" http://kaolin.unice.fr/bigloo/bigloo.html

$B$^$?!"=q@R$G$O(B Scheme $B$N:n$B!V7W;;5!%W%m%0%i%`$N9=B$$H2r (G. J. $B%5%9%^%s(B, H. $B%(%$%V%k%=%s(B, J. $B%5%9%^%sCx(B, $BOBED(B $B1Q0lLu(B, $B%T%"%=%s!&%(%G%e%1!<%7%g%sH/9T(B 2000$BG/(B ISBN 4-89471-163-X, $B86Bj(B: ``Structure and Interpretation of Computer Programs, 2nd Edition'') $B$,$*$9$9$a$G$9!#$3$l$O(B Scheme $B%W%m%0%i%_%s%0$K8B$i$:!"%3%s%T%e!<%?%5%$%(%s%9$K(B $B4X$9$k$H$F$b$h$$652J=q$H$J$C$F$$$^$9!#(B


$BCm(B:

1. $B7G:\$N$$$-$5$D(B: 4$B7n$NCf$4$m!"5;=QI>O@Scheme $B%Z!<%8(B $B$K0z$C$+$+$C$?$H$+$G!#(B

2. $B7G:\;~!"$\$/$O$3$3$r!V(B1970$BG/Be!W$H$7$F$^$7$?!#(B 70$BG/Be$K3+H/$5$l$?$N$O(B Scheme $B$N$[$&$G$9$M!#$9$_$^$;$s!#(B


Last Modified: Sat Feb 18 17:25:07 EST 2006 (02/19, 07:25 JST)
Yusuke Shinyama