version 1.9, 2003/11/27 12:08:58 |
version 1.19, 2014/03/11 01:46:19 |
|
|
@comment $OpenXM: OpenXM/src/asir-doc/parts/asir.texi,v 1.8 2003/10/21 09:17:57 takayama Exp $ |
@comment $OpenXM: OpenXM/src/asir-doc/parts/asir.texi,v 1.18 2005/07/25 12:23:05 takayama Exp $ |
\BJP |
\BJP |
@node $B%f!<%68@8l(B Asir,,, Top |
@node $B%f!<%68@8l(B Asir,,, Top |
@chapter $B%f!<%68@8l(B Asir |
@chapter $B%f!<%68@8l(B Asir |
Line 227 Use of lists enables to write programs more easily, sh |
|
Line 227 Use of lists enables to write programs more easily, sh |
|
comprehensible than use of structure like C programs. |
comprehensible than use of structure like C programs. |
\E |
\E |
|
|
|
\BJP |
@item |
@item |
|
$B%f!<%6Dj5AH!?t$K$*$1$k0l9T%X%k%W(B. Emacs-Lisp $B$KN`;w$7$?5!G=$G$"$k(B. |
|
$B>\$7$/$O(B, @xref{$B%f!<%6Dj5AH!?t(B} $B$r8+$h(B. |
|
\E |
|
|
|
@item |
\JP $B%f!<%6Dj5AH!?t$K$*$1$k%*%W%7%g%s;XDj(B. |
\JP $B%f!<%6Dj5AH!?t$K$*$1$k%*%W%7%g%s;XDj(B. |
\EG Options can be specified in calling user defined functions. |
\EG Options can be specified in calling user defined functions. |
|
|
Line 236 comprehensible than use of structure like C programs. |
|
Line 242 comprehensible than use of structure like C programs. |
|
@end itemize |
@end itemize |
|
|
\BJP |
\BJP |
|
@noindent |
|
Asir $B$G$O<!$N8l6g$,%-!<%o!<%I$H$7$FDj$a$i$l$F$$$k(B. |
|
@itemize |
|
@item C $B8@8l$KM3Mh(B: |
|
|
|
@code{break}, @code{continue}, @code{do}, @code{else}, @code{extern}, |
|
@code{for}, @code{if}, @code{return}, @code{static}, @code{struct}, |
|
@code{while} |
|
@item C $B8@8l$+$i$N3HD%(B: |
|
|
|
@code{def}, @code{endmodule}, @code{function}, @code{global}, |
|
@code{local}, @code{localf}, @code{module} |
|
@item $BH!?t(B: |
|
|
|
@code{car}, @code{cdr}, @code{getopt}, @code{newstruct}, @code{map}, |
|
@code{pari}, @code{quote}, @code{recmap}, @code{timer} |
|
@end itemize |
|
\E |
|
|
|
\BJP |
@node $B%f!<%6Dj5AH!?t$N=q$-J}(B,,, $B%f!<%68@8l(B Asir |
@node $B%f!<%6Dj5AH!?t$N=q$-J}(B,,, $B%f!<%68@8l(B Asir |
@section $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@section $B%f!<%6Dj5AH!?t$N=q$-J}(B |
\E |
\E |
Line 371 In the second example, @code{c(N)} returns a vector, s |
|
Line 397 In the second example, @code{c(N)} returns a vector, s |
|
@code{N+1}. @code{A[I]} is a vector of length @code{I+1}, and |
@code{N+1}. @code{A[I]} is a vector of length @code{I+1}, and |
each element is again a vector which contains |
each element is again a vector which contains |
\E |
\E |
|
@iftex |
|
@tex |
|
${_I}C_J$ |
|
@end tex |
|
@end iftex |
|
@ifinfo |
|
ICJ |
|
@end ifinfo |
|
\JP $B$rMWAG$H$9$kG[Ns$G$"$k(B. |
|
\EG as its elements. |
|
|
@noindent |
@noindent |
\BJP |
\BJP |
Line 378 each element is again a vector which contains |
|
Line 414 each element is again a vector which contains |
|
Emacs-Lisp $B$N4X?tDj5A$KN`;w$N5!G=$G!"%X%k%WMQ$NJ8;zNs$G$"$k!#(B |
Emacs-Lisp $B$N4X?tDj5A$KN`;w$N5!G=$G!"%X%k%WMQ$NJ8;zNs$G$"$k!#(B |
$B$3$NNc$N>l9g!"(B@code{help(add)} $B$K$h$C$F$3$NJ8;zNs$,=PNO$5$l$k!#(B |
$B$3$NNc$N>l9g!"(B@code{help(add)} $B$K$h$C$F$3$NJ8;zNs$,=PNO$5$l$k!#(B |
\E |
\E |
|
|
@table @t |
@table @t |
\JP @item $B;2>H(B |
\JP @item $B;2>H(B |
\EG @item References |
\EG @item References |
@fref{help}. |
@fref{help}. |
@end table |
@end table |
|
|
@iftex |
|
@tex |
|
${_I}C_J$ |
|
@end tex |
|
@end iftex |
|
@ifinfo |
|
ICJ |
|
@end ifinfo |
|
\JP $B$rMWAG$H$9$kG[Ns$G$"$k(B. |
|
\EG as its elements. |
|
|
|
@noindent |
@noindent |
\BJP |
\BJP |
$B0J2<$G$O(B, C $B$K$h$k%W%m%0%i%_%s%0$N7P83$,$J$$?M$N$?$a$K(B, @b{Asir} $B8@8l(B |
$B0J2<$G$O(B, C $B$K$h$k%W%m%0%i%_%s%0$N7P83$,$J$$?M$N$?$a$K(B, @b{Asir} $B8@8l(B |
Line 462 All the program variables are initialized to the value |
|
Line 486 All the program variables are initialized to the value |
|
|
|
\BJP |
\BJP |
@item $BITDj85(B |
@item $BITDj85(B |
$B>.J8;z$G;O$^$j(B, $B%"%k%U%!%Y%C%H(B, $B?t;z(B, @samp{_} $B$+$i$J$kJ8;zNs(B |
$B>.J8;z$G;O$^$j(B, $B%"%k%U%!%Y%C%H(B, $B?t;z(B, @samp{_} $B$+$i$J$kJ8;zNs(B, |
|
$B$^$?$O%7%s%0%k%/%*!<%H$G0O$^$l$?J8;zNs(B, $B$b$7$/$OH!?t7A<0(B. |
$BITDj85$H$O(B, $BB?9`<04D$r9=@.$9$k:]$KE:2C$5$l$kJQ?t$r$$$&(B. @b{Asir} $B$K(B |
$BITDj85$H$O(B, $BB?9`<04D$r9=@.$9$k:]$KE:2C$5$l$kJQ?t$r$$$&(B. @b{Asir} $B$K(B |
$B$*$$$F$O(B, $BITDj85$OCM$r$b$?$J$$D61[E*$J85$G$"$j(B, $BITDj85$X$NCM$NBeF~$O(B |
$B$*$$$F$O(B, $BITDj85$OCM$r$b$?$J$$D61[E*$J85$G$"$j(B, $BITDj85$X$NCM$NBeF~$O(B |
$B5v$5$l$J$$(B. |
$B5v$5$l$J$$(B. |
\E |
\E |
Line 483 An indeterminate cannot have any value. No assignment |
|
Line 507 An indeterminate cannot have any value. No assignment |
|
x |
x |
[4] X^2+X+1; |
[4] X^2+X+1; |
x^2+x+1 |
x^2+x+1 |
|
[5] A='Dx'*(x-1)+x*y-y; |
|
(y+Dx)*x-y-Dx |
|
[6] function foo(x,y); |
|
[7] B=foo(x,y)*x^2-1; |
|
foo(x,y)*x^2-1 |
@end example |
@end example |
@end table |
@end table |
|
|
Line 862 if ( expression1 ) @{ |
|
Line 891 if ( expression1 ) @{ |
|
@noindent |
@noindent |
\JP $B$H$7$J$1$l$P$J$i$J$$(B. |
\JP $B$H$7$J$1$l$P$J$i$J$$(B. |
|
|
|
\BJP |
|
@noindent |
|
$B4X?t$NCf$G$J$/(B, top level $B$G(B @code{if} $BJ8$rMQ$$$k$H$-$O(B @code{$} $B$^$?$O(B @code{;} |
|
$B$G=*N;$9$kI,MW$,$"$k(B. |
|
$B$3$l$i$,$J$$$H<!$NJ8$,$h$_$H$P$5$l$k(B. |
|
\E |
|
\BEG |
|
@noindent |
|
When @code{if} is used in the top level, the @code{if} expression should be |
|
terminated with @code{$} or @code{;}. |
|
If there is no terminator, the next expression will be skipped to be evaluated. |
|
\E |
|
|
\BJP |
\BJP |
@node $B%k!<%W(B break return continue,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@node $B%k!<%W(B break return continue,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@subsection $B%k!<%W(B, @code{break}, @code{return}, @code{continue} |
@subsection $B%k!<%W(B, @code{break}, @code{return}, @code{continue} |
Line 1029 statement, and the termination condition will be evalu |
|
Line 1071 statement, and the termination condition will be evalu |
|
\BJP |
\BJP |
$B9=B$BN$H$O(B, $B3F@.J,$NMWAG$,L>A0$G%"%/%;%9$G$-$k8GDjD9G[Ns$H;W$C$F$h$$(B. |
$B9=B$BN$H$O(B, $B3F@.J,$NMWAG$,L>A0$G%"%/%;%9$G$-$k8GDjD9G[Ns$H;W$C$F$h$$(B. |
$B3F9=B$BN$OL>A0$G6hJL$5$l$k(B. $B9=B$BN$O(B, @code{struct} $BJ8$K$h$j@k8@$5$l$k(B. |
$B3F9=B$BN$OL>A0$G6hJL$5$l$k(B. $B9=B$BN$O(B, @code{struct} $BJ8$K$h$j@k8@$5$l$k(B. |
|
$B9=B$BN$,@k8@$5$l$k$H$-(B, asir $B$OFbIt$G9=B$BN$N$=$l$>$l$N7?$K8GM-$N<1JL(B |
|
$BHV9f$r$D$1$k(B. $B$3$NHV9f$O(B, $BAH$_9~$_4X?t(B @code{struct_type} $B$K$h$j<hF@(B |
|
$B$G$-$k(B. |
$B$"$k7?$N9=B$BN$O(B, $BAH$_9~$_4X?t(B @code{newstruct} $B$K$h$j@8@.$5$l$k(B. |
$B$"$k7?$N9=B$BN$O(B, $BAH$_9~$_4X?t(B @code{newstruct} $B$K$h$j@8@.$5$l$k(B. |
$B9=B$BN$N3F%a%s%P$O(B, $B1i;;;R(B @code{->} $B$K$h$j%"%/%;%9$9$k(B. |
$B9=B$BN$N3F%a%s%P$O(B, $B1i;;;R(B @code{->} $B$K$h$j%"%/%;%9$9$k(B. |
$B%a%s%P$,9=B$BN$N>l9g(B, @code{->} $B$K$h$k;XDj$OF~$l;R$K$G$-$k(B. |
$B%a%s%P$,9=B$BN$N>l9g(B, @code{->} $B$K$h$k;XDj$OF~$l;R$K$G$-$k(B. |
Line 1055 by @code{->} can be nested. |
|
Line 1100 by @code{->} can be nested. |
|
2 |
2 |
[5] A; |
[5] A; |
@{1,2@} |
@{1,2@} |
|
[6] struct_type(A); |
|
1 |
@end example |
@end example |
|
|
|
@table @t |
|
\JP @item $B;2>H(B |
|
\EG @item References |
|
@fref{newstruct}, @fref{struct_type} |
|
@end table |
|
|
\BJP |
\BJP |
@node $B$5$^$6$^$J<0(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@node $B$5$^$6$^$J<0(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@subsection $B$5$^$6$^$J<0(B |
@subsection $B$5$^$6$^$J<0(B |
Line 1226 through @code{cpp}. This enables @b{Asir} user to use |
|
Line 1279 through @code{cpp}. This enables @b{Asir} user to use |
|
@code{#include} |
@code{#include} |
@* |
@* |
\BJP |
\BJP |
@code{cpp} $B$KFC$K0z?t$rEO$5$J$$$?$a(B, $B%$%s%/%k!<%I%U%!%$%k$O(B, |
UNIX $B$G$O(B $B%$%s%/%k!<%I%U%!%$%k$O(B, Asir $B$N%i%$%V%i%j%G%#%l%/%H%j(B |
@code{#include} $B$,=q$+$l$F$$$k%U%!%$%k$HF1$8%G%#%l%/%H%j$G%5!<%A$5$l$k(B. |
($B4D6-JQ?t(B @b{ASIR_LIBDIR} $B$G;XDj$5$l$?%G%#%l%/%H%j(B) |
|
$B$H(B @code{#include} $B$,=q$+$l$F$$$k%U%!%$%k$HF1$8%G%#%l%/%H%j$r%5!<%A$9$k(B. |
|
UNIX $B0J30$G$O(B @code{cpp} $B$KFC$K0z?t$rEO$5$J$$$?$a(B, |
|
@code{#include} $B$,=q$+$l$F$$$k%U%!%$%k$HF1$8%G%#%l%/%H%j$N$_$r%5!<%A$9$k(B. |
\E |
\E |
\BEG |
\BEG |
Include files are searched within the same directory as the file |
Include files are searched within the same directory as the file |
Line 1296 because such comments cannot be nested. |
|
Line 1352 because such comments cannot be nested. |
|
#define MAX(a,b) ((a)>(b)?(a):(b)) |
#define MAX(a,b) ((a)>(b)?(a):(b)) |
@end example |
@end example |
|
|
|
\BJP |
|
@noindent |
|
C $B$N%W%j%W%m%;%C%5$rN.MQ$7$F$$$k$?$a(B, $B%W%j%W%m%;%C%5$O(B @code{$} $B$r@5$7$/=hM}$G$-$J$$(B. |
|
$B$?$H$($P(B @code{LIST} $B$,Dj5A$5$l$F$$$F$b(B |
|
@code{LIST$}$B$OCV49$5$l$J$$(B. @code{$} $B$NA0$K6uGr$r$*$$$F(B |
|
@code{LIST $} $B$H=q$+$J$$$H$$$1$J$$(B. |
|
\E |
|
\BEG |
|
@noindent |
|
Since we are utilizing the C preprocessor, it cannot properly preprocess expressions |
|
with @code{$}. |
|
For example, even if @code{LIST} is defined, @code{LIST} in the expression |
|
@code{LIST$} is not replaced. Add a blank before @code{$}, i.e., |
|
write as @code{LIST $} to make the proprocessor replace it properly. |
|
\E |
|
|
\BJP |
\BJP |
@node $B%*%W%7%g%s;XDj(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@node $B%*%W%7%g%s;XDj(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
Line 1380 After @samp{|} one can append any number of options se |
|
Line 1451 After @samp{|} one can append any number of options se |
|
[100] xxx(1,2,x^2-1,[1,2,3]|proc=1,index=5); |
[100] xxx(1,2,x^2-1,[1,2,3]|proc=1,index=5); |
@end example |
@end example |
|
|
|
\BJP |
|
$B$5$i$K(B, $B%*%W%7%g%s$r(B @code{key1=value1,key2=value2,...} $B$N$h$&$K(B |
|
@samp{,} $B$G6h@Z$C$FEO$9Be$o$j$K(B, $BFCJL$J%-!<%o!<%I(B @code{option_list} |
|
$B$H%*%W%7%g%s%j%9%H(B @code{[["key1",value1],["key2",value2],...]} |
|
$B$rMQ$$$FEO$9$3$H$b2DG=$G$"$k(B. |
|
\E |
|
\BEG |
|
Optinal arguments may be given as a list |
|
with the key word @code{option_list} |
|
as |
|
@code{option_list=[["key1",value1],["key2",value2],...]}. |
|
It is equivalent to pass the optional arguments as |
|
@code{key1=value1,key2=value2,...}. |
|
\E |
|
|
|
@example |
|
[101] dp_gr_main([x^2+y^2-1,x*y-1]|option_list=[["v",[x,y]],["order",[[x,5,y,1]]]]); |
|
@end example |
|
|
\BJP |
\BJP |
|
$BFC$K(B, $B0z?t$J$7$N(B @code{getopt()} $B$O%*%W%7%g%s%j%9%H$rJV$9$N$G(B, |
|
$B%*%W%7%g%s$r$H$k4X?t$+$i(B, $B%*%W%7%g%s$r$H$k4X?t$r8F$S=P$9$H$-$K$OM-MQ$G$"$k(B. |
|
\E |
|
\BEG |
|
Since @code{getopt()} returns an option list, |
|
the optional argument @code{option_list=...} is useful when |
|
we call functions with optional arguments from |
|
a function with optional arguments to pass |
|
the all optional parameters. |
|
\E |
|
|
|
@example |
|
% cat foo.rr |
|
def foo(F) |
|
@{ |
|
OPTS=getopt(); |
|
return factor(F|option_list=OPTS); |
|
@} |
|
@end example |
|
|
|
@example |
|
[3] load("foo.rr")$ |
|
[4] foo(x^5-1|mod=11); |
|
[[1,1],[x+6,1],[x+2,1],[x+10,1],[x+7,1],[x+8,1]] |
|
@end example |
|
|
|
\BJP |
@node $B%b%8%e!<%k(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@node $B%b%8%e!<%k(B,,, $B%f!<%6Dj5AH!?t$N=q$-J}(B |
@subsection $B%b%8%e!<%k(B |
@subsection $B%b%8%e!<%k(B |
\E |
\E |
|
|
|
|
\BJP |
\BJP |
$B%b%8%e!<%k$O(B @code{module} $B%b%8%e!<%kL>(B $B!A(B @code{endmodule}$B$G0O$`(B. |
$B%b%8%e!<%k$O(B @code{module} $B%b%8%e!<%kL>(B $B!A(B @code{endmodule}$B$G0O$`(B. |
|
$B%b%8%e!<%k$OF~$l;R$K$O$G$-$J$$(B. |
$B%b%8%e!<%k$NCf$@$1$G;H$&Bg0hJQ?t$O(B @code{static} $B$G@k8@$9$k(B. |
$B%b%8%e!<%k$NCf$@$1$G;H$&Bg0hJQ?t$O(B @code{static} $B$G@k8@$9$k(B. |
$B$3$NJQ?t$O%b%8%e!<%k$N30$+$i$O;2>H$b$G$-$J$$$7JQ99$b$G$-$J$$(B. |
$B$3$NJQ?t$O%b%8%e!<%k$N30$+$i$O;2>H$b$G$-$J$$$7JQ99$b$G$-$J$$(B. |
|
@code{static} $BJQ?t$O$9$Y$F$N4X?tDj5A$NA0$K@k8@$7$J$$$H$$$1$J$$(B. |
|
$B%Q!<%5!<$,%o%s%Q%9$N$?$a(B, $B@k8@$N$J$$JQ?t$O<+F0E*$K6I=jJQ?t$H$_$J$5$l$k$+$i$G$"$k(B. |
$B%b%8%e!<%k$N30$NBg0hJQ?t$O(B @code{extern} $B$G@k8@$9$k(B. |
$B%b%8%e!<%k$N30$NBg0hJQ?t$O(B @code{extern} $B$G@k8@$9$k(B. |
\E |
\E |
\BEG |
\BEG |
|
|
A variable of a module is declared with the key word @code{static}. |
A variable of a module is declared with the key word @code{static}. |
The static variables cannot be refered nor changed out of the module, |
The static variables cannot be refered nor changed out of the module, |
but it can be refered and changed in any functions in the module. |
but it can be refered and changed in any functions in the module. |
A global variable which can be refered and changed at any place |
The @code{static} variables must be declared before the definitions of functions, |
|
because the one-path parser of asir automatically assume variables as local variables |
|
if there is no declaration for them. |
|
A global variable which can be refered and changed in or out of the module |
is declared with the key word @code{extern}. |
is declared with the key word @code{extern}. |
\E |
\E |
|
|
Line 1515 The below is an example of demand loading. |
|
Line 1637 The below is an example of demand loading. |
|
\E |
\E |
|
|
@example |
@example |
if (!module_definep("stack")) load("stack.rr") $ |
if (!module_definedp("stack")) load("stack.rr") $ |
@end example |
@end example |
|
|
\BJP |
\BJP |
|
|
/* The body of the module stack */ |
/* The body of the module stack */ |
endmodule; |
endmodule; |
@end example |
@end example |
|
|
|
\BJP |
|
$B%b%8%e!<%k$NCf$+$i%H%C%W%l%Y%k$GDj5A$5$l$F$$$k4X?t$r8F$V$K$O(B, |
|
$B2<$NNc$N$h$&$K(B @code{::} $B$rMQ$$$k(B. |
|
\E |
|
\BEG |
|
In order to call functions defined in the top level from the inside |
|
of a module, we use @code{::} as in the example below. |
|
\E |
|
@example |
|
def afo() @{ |
|
S = "afo, afo"; |
|
return S; |
|
@} |
|
module abc; |
|
localf foo,afo $ |
|
|
|
def foo() @{ |
|
G = ::afo(); |
|
return G; |
|
@} |
|
def afo() @{ |
|
return "afo, afo in abc"; |
|
@} |
|
endmodule; |
|
end$ |
|
|
|
[1200] abc.foo(); |
|
afo, afo |
|
[1201] abc.afo(); |
|
afo, afo in abc |
|
@end example |
|
|
|
@table @t |
|
\JP @item $B;2>H(B |
|
\EG @item References |
|
@fref{module_list}, @fref{module_definedp}, @fref{remove_module}. |
|
@end table |