Trong phần "tập huấn" này, chúng tôi sẽ giới thiệu cho bạn các khái niệm cơ bản cần thiết về Scheme để dùng Script-Fu, và sau đó xây dựng một tập lệnh có ích mà bạn có thể thêm vào hộp công cụ chứa các tập lệnh của bạn. Tập lệnh này sẽ nhắc người dùng nhập một số chữ, sau đó tạo ra một ảnh mới có kích thước vừa đúng với chữ đó. Chúng ta sẽ cải tiến tập lệnh để cho phép tạo ra một vùng đệm xung quanh chữ. Chúng ta sẽ kết thúc với một vài đề xuất về những cách có thể làm bạn "nhảy vọt" kiến thức về Script-Fu.
|
Ghi chú |
|---|---|
|
Phần này phỏng theo một hướng dẫn có trong tài liệu chỉ dẫn GIMP 1 do Mike Terry viết. |
|
Điều đầu tiên cần học là:
Mỗi lệnh trong Scheme được đặt trong ngoặc đơn ().
Điề thứ hai bạn cần biết là:
Tên hàm số/toán tử luôn là mục đầu tiên trong ngoặc đơn, và các mục còn lại là các thông số của hàm.
Tuy nhiên, không phải mọi thứ nằm trong ngoặc đơn là hàm---chúng cũng có thể là các mục trong một danh sách---nhưng chúng ta sẽ bàn sau. Ghi chú tiếp theo là về ghi chú tiền tố (prefix notation), bởi vì hàm số đi trước mọi thứ. Nếu bạn đã biết ghi chú hậu tố (postfix notation) hoặc bạn có một máy tính điện tử dùng Reverse Polish Notation (giống như hầu hết các máy tính điện tử của HP), bạn sẽ không gặp khó khăn gì trong việc thành lập các biểu thức trong Scheme.
Điều thứ ba cần hiểu là:
Các toán tử cũng được coi như các hàm, và do vậy được liệt kê trước khi viết các biểu thức toán học.
Điều này tuân theo một cách hợp lý với ghi chú tiền tố và chúng ta vừa đề cập.
Dưới đây là một số ví dụ nhanh về sự khác biệt giữa các ghi chú tiền tố (prefix), trung tố (infix) và hậu tố (postifx). Chúng ta sẽ cộng 1 với 3:
Ghi chú tiền tố : + 1 3 (là cách Scheme "muốn")
Ghi chú trung tố: 1 + 3 (cách mà chúng ta "thường" viết)
Ghi chú hậu tố: 1 3 + (cách mà nhiều máy tính điện tử HP"muốn")
Bây giờ, chúng ta sẽ thực tập những gì vừa học. Khởi động GIMP, nếu bạn chưa làm thế, và chọn Xtns/Script-Fu/Console. Lệnh này sẽ khởi động cửa sổ Script-Fu Console, cho phép chúng ta làm việc một cách tương tác trong GIMP. Trong tích tắc, cửa sổ Console Script-Fu sẽ xuất hiện:
Dưới cùng của cửa sổ này là một trường nhập (entry-field) có tên là Current Command (lệnh hiện tại). Tại đây chúng ta sẽ thử các lệnh Scheme đơn giản một cách tương tác. Hãy bắt đầu từ thứ dễ dàng, và thêm vài con số:
(+ 3 5)
Gõ dòng trên vào và bấm Enter sẽ tạo ra câu trả lời mong đợi là 8 trong cửa sổ trung tâm.
Bây giờ, làm thế nào nếu chúng ta muốn thêm một số nữa? Hàm "+" có thể có hai hay nhiều đối số, do vậy không có vấn đề gì cả:
(+ 3 5 6)
Dòng lệnh trên cũng sẽ tạo ra kết quả mong đợi là 14.
Cho đến lúc này mọi chuyện đều ổn cả--chúng ta gõ một câu lệnh (statement) Scheme và nó được thực hiện ngay tức khắc trong cửa sổ Console Script-Fu. Bây giờ là lúc cần lưu ý...
Nếu bạn giống tôi, bạn thường sử dụng các ngoặc đơn bổ sung bất kỳ khi nào bạn muốn -- ví dụ như khi gõ một phương trình toán học phức tạp và bạn muốn tách các phần ra bằng các dấu ngoặc đơn để cho chúng rõ ràng hơn khi bạn đọc chúng. Trong Scheme, bạn phải cẩn thận và không được chèn các ngoặc đơn bổ sung sai. Ví dụ, giả sử chúng ta muốn thêm 3 vào kết quả cộng 5 và 6:
3 + (5 + 6) + 7= ?
Đã biết rằng toán tử + có thể nhận một danh sách các con số để cộng, bạn có thể thử biến đổi phép toán trên thành dòng sau:
(+ 3 (5 6) 7)
Tuy nhiên, câu lệnh trên không đúng -- hãy nhớ rằng, mỗi câu lệnh trong Scheme bắt đầu và kết thúc bằng dấu ngoặc đơn, do vậy trình diễn giải Scheme (Sheme interpreter) sẽ nghĩ là bạn đang cố gắng gọi một hàm có tên là "5" trong cặp ngoặc đơn thứ hai, chứ không phải là tính tổng của các con số đó trước khi cộng thêm 3 vào.
Cách viết đúng câu lệnh trên sẽ là:
(+ 3 (+ 5 6) 7)
Nếu bạn quen thuộc với các ngôn ngữ lập trình khác như C/C++, Perl hoặc Java, bạn sẽ biết rằng ta không cần các khoảng trắng quanh những toán tử để có thể tạo ra một biểu thức đúng:
3+5, 3 +5, 3+ 5
Tất cả những câu lệnh trên đều được các trình biên dịch C/C++, Perl và Java chấp nhận. Tuy nhiên điều này không đúng đối với Scheme. Bạn phải có một khoảng trắng sau mỗi toán tử (hoặc bất kỳ hàm số nào) trong Scheme để nó có thể được diễn giải đúng đắn bằng trình diễn giải của Scheme.
Hãy thực tập một chút với các phương trình toán học đơn giản trong cửa sổ Script-Fu Console cho đến khi bạn hoàn toàn thoải mái với các khái niệm ban đầu này.