Xem mã nguồn một chu trình

Một phần của tài liệu lập trình trên maple (Trang 32 - 35)

2. Chu trình tính khai triển Fourier của hàm số

4.3.3. Xem mã nguồn một chu trình

15 8 x Dùng hàm untrace() để tắt chế độ dò từng b−ớc: [>untrace(L); L [>L(5,x); − + 63 8 x5 35 4 x3 15 8 x

4.3.3. Xem mã nguồn một chu trình

Cú pháp

Khai báo:

showstat(procName);

showstat(procName,statRange);

Tham số:

procName: tên của chu trình cần hiện thị mã nguồn. statRange: Phạm vi các dòng lệnh cần đ−ợc hiển thị (từ dòng nào đến dòng nào).

Mô tả

Phần lớn các lệnh trong Maple đều đ−ợc viết bằng ngôn ngữ Maple, do đó chúng ta có thể đọc đ−ợc mã nguồn của những lệnh nàỵ Maple cung cấp hàm showstat() để hiện đoạn ch−ơng trình là mã nguồn của các lệnh trên. Nhờ có hàm showstat(), ng−ời học lập trình trên Maple có thể dễ dàng học đ−ợc các cách thức cũng nh− đặc tr−ng ngôn ngữ bằng cách nghiên cứu ph−ơng thức mà các lệnh của Maple thực hiện (thông qua việc xem mã nguồn của chúng).

Ta có thể hiển thị một phần của mã nguồn của các chu trình bằng cách định rõ phạm vi của các dòng cần thể hiện. Chẳng hạn ta cần hiển thị các dòng lệnh của một chu trình nào đó từ dòng 3 đến dòng thứ 5, phạm vi cần chỉ rõ trong đối số thứ hai là 3..5.

L−u ý là có một số hàm của Maple là các hàm gắn liền với ngôn ngữ (nh−sort,

max, min, seq,...) là không thể đọc mã nguồn của chúng.

Ngoài hàm này ra, còn có một cách khác để đọc đ−ợc mã nguồn của các hàm có sẵn đó là sử dụng hàm print() và hàm interface() đ−ợc trình bày trong phần tiếp theọ

Minh họa

Dùng hàm showstat() để đọc mã nguồn của lệnh sin

[>showstat(sin);

sin := proc(x) local n, t;

1 if nargs <> 1 then

2 ERROR(`expecting 1 argument, got `.nargs) elif type(x,'complex(float)') then

3 evalf('sin'(x))

elif type(x,`*`) and member((- 1)^(1/2),{op(x)}) then

4 (-1)^(1/2)*sinh(-(-1)^(1/2)*x) elif type(x,'complex(numeric)') then 5 if csgn(x) < 0 then

6 -sin(-x) else

7 'sin'(x) fi

elif type(x,`*`) and

type(op(1,x),'complex(numeric)') and csgn(op(1,x)) < 0 then

8 -sin(-x)

elif type(x,`*`) and

type(x,'`&*`(rational,identical(Pi))') then 9 t := op(1,x); 10 if t < 1/2 then 11 'sin'(x) elif t < 1 then 12 sin((1-t)*Pi) elif t < 2 then

13 -sin((2-t)*Pi) else

14 sin((t-2*iquo(trunc(t),2))*Pi) fi

elif type(x,`+`) and traperror(sign(x)) = - 1 then

15 -sin(-x)

elif type(x,`+`) and has(x,Pi) then 16 t := map(proc (x) if

type(x/Pi,'rational') then x/Pi fi end,{op(x)}); 17 if nops(t) = 1 then 18 t := op(t); 19 if t < 0 then 20 sin(x-2*Pi*trunc(1/2*t)+2*Pi) elif t < 1/2 then 21 sin(x) := 'sin'(x) elif t < 1 then 22 cos(x-1/2*Pi) elif t < 2 then 23 -sin(x-Pi) else 24 sin(x-2*Pi*trunc(1/2*t)) fi else 25 sin(x) := 'sin'(x) fi

elif type(x,`*`) and member(Pi,[op(x)],'n') and Im(x) = 0 then

26 t := subsop(n = 1,x); 27 if frac(t) = 0 then 28 0

elif frac(1/2*t-1/4) = 0 then 29 1

elif frac(1/2*t+1/4) = 0 then 30 -1

elif frac(t-1/2) = 0 then 31 (-1)^(t-1/2)

else

32 sin(x) := 'sin'(x) fi

elif type(x,'function') and nops(x) = 1 then

33 n := op(0,x); 34 t := op(1,x);

35 if n = ('arcsin') then 36 t

elif n = ('arccos') then 37 sqrt(1-t^2)

elif n = ('arctan') then 38 t/sqrt(1+t^2)

39 1/t

elif n = ('arcsec') then 40 sqrt(1-1/t^2)

elif n = ('arccot') then 41 1/sqrt(1+t^2) else 42 sin(x) := 'sin'(x) fi elif type(x,'arctan(algebraic,algebraic)') then 43 op(1,x)/sqrt(op(1,x)^2+op(2,x)^2) else 44 sin(x) := 'sin'(x) fi end

Trong lệnh trên, dòng đầu tiên chỉ ra rằng hàm sin là một proc có một đối số là

x. Các dòng tiếp theo đ−ợc đánh số chính là số dòng của các lệnh có trong mã nguồn của lệnh đó.

Một phần của tài liệu lập trình trên maple (Trang 32 - 35)

Tải bản đầy đủ (PDF)

(58 trang)