Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
nhoclangbat

[Hỏi] Về cách sử dụng và xử lý hàm tự định nghĩa trong lsp

Các bài được khuyến nghị

nhoclangbat    382

Em đang học bên lớp anh Ket, anh Ket cho em câu hỏi mà nghĩ mãi ko ra dù đã đc anh Ket gợi ý, chắc tại em tay ko bước vào từ trước giờ chưa học wa 1 loại lập trình nào nên ko có cơ bản lắm, anh Ket chỉ đến đâu bắt chước đc đến đó hiểu sâu thì chắc là chưa hihi, anh văn cũng dở nốt :D. CÂu hỏi của anh KEt , anh cho vD sau:

 

 

(defun c:test (/ x y z)

(setq x (getint "\nNhap so 1:"))

(setq y (getint "\nNhap so 2:"))

(setq z (getint "\nNhap so 3:"))

(tichbaso x y z)

(defun tichbaso ( a b c)

(* a b c)

)

);_end defun test

 

 

 

Câu thứ 1: ko load tự suy luận khi load lsp có thực thi đc ko.

2- khi đã sửa lại đúng thì làm cách nào để khử đc hàm tichbaso ra khỏi bộ nhớ cad.

-Qua anh Ket hướng dẫn thì em hiểu cad nó đọc từ trên xuống, hàm do em tự tạo đc load và lưu vào bộ nhớ ngay khi load, mục đích để định nghĩa hàm đó, để khi chạy thủ tục test nó chạy đc. Anh Ket vd: dòng (defun tichbaso... )là để

giới thiệu cho cad biết để khi thực hiện thủ tục test thì nó gọi tên hàm tichbaso dòng (tichbaso ....). Em đã ăn gian load thử :D thì pit là nó báo lỗi " no function definition: TICHBASO " em lờ mờ hiểu là ko có định nghĩa hàm tichbaso. Theo em thì là do nó nằm trong thân thủ tục nên nó không hiểu và ko đc load vào cad. em ko pit có đúng ko. Câu thứ 2 em bó tay. Mong đc các anh hương dẫn để em thông, nghĩ hoài ko ra >''<

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Hỏi anh Ket chứ sao đem qua đây hỏi? :lol:

Trả lời "đại": cái gì có rồi thì mới đem ra xài được, cái gì chưa có thì chưa đem ra xài được. Áp dụng vào lisp này cũng thế.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Em đang học bên lớp anh Ket, anh Ket cho em câu hỏi mà nghĩ mãi ko ra dù đã đc anh Ket gợi ý, chắc tại em tay ko bước vào từ trước giờ chưa học wa 1 loại lập trình nào nên ko có cơ bản lắm, anh Ket chỉ đến đâu bắt chước đc đến đó hiểu sâu thì chắc là chưa hihi, anh văn cũng dở nốt :D. CÂu hỏi của anh KEt , anh cho vD sau:

 

 

Câu thứ 1: ko load tự suy luận khi load lsp có thực thi đc ko.

2- khi đã sửa lại đúng thì làm cách nào để khử đc hàm tichbaso ra khỏi bộ nhớ cad.

-Qua anh Ket hướng dẫn thì em hiểu cad nó đọc từ trên xuống, hàm do em tự tạo đc load và lưu vào bộ nhớ ngay khi load, mục đích để định nghĩa hàm đó, để khi chạy thủ tục test nó chạy đc. Anh Ket vd: dòng (defun tichbaso... )là để

giới thiệu cho cad biết để khi thực hiện thủ tục test thì nó gọi tên hàm tichbaso dòng (tichbaso ....). Em đã ăn gian load thử :D thì pit là nó báo lỗi " no function definition: TICHBASO " em lờ mờ hiểu là ko có định nghĩa hàm tichbaso. Theo em thì là do nó nằm trong thân thủ tục nên nó không hiểu và ko đc load vào cad. em ko pit có đúng ko. Câu thứ 2 em bó tay. Mong đc các anh hương dẫn để em thông, nghĩ hoài ko ra >''<

Câu 1 : Lisp đọc từ trên xuống dưới, đọc đến dòng (tichbaso x y z) -> không hiểu lấy từ đâu ra vì hàm tichbaso được định nghĩa "phía dưới" và đương nhiên là hàm tichbaso sẽ không được load.

 

Câu 2 : "Khử" hàm cũng giống như "khử" biến vậy

Trả lời vậy chắc em đã thông.....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

thật thì em chưa thông :D, lsp đọc từ trên xuống thì anh Ket có dạy nhưng .vd: nó đọc đến dòng (tichbaso x y z ) dòng tip theo là định nghĩa hàm tichbaso ở dưới theo em thì cũng có thể chứ lúc đó nó ko pit sau đó đã định nghĩa sẽ pit chứ nhỉ ^^, như cách trả lời của em có phần nào đúng ko mấy anh, vì định nghĩa hàm nằm trong thân thủ tục nên nó ko hỉu phải để nó độc lập để khi load nó load cái định ngĩa lun, còn thủ tục khi mình nhập lệnh trên dòng CM nó mới bắt đầu chạy từ trên xuống ^^

Còn câu 2 khử biến thì em pit còn như anh nói khử hàm cũng vậy , như em ko rõ khử theo cách nào, anh Ket cũng hướng dẫn giống anh, nếu setq cho nó nil thì khi chạy lsp nó ko cho ra đc kết quả chỉ nhập số đc thui, chó nó thành biến cục bộ mà ko pit để ở đâu để ở dòng defun thì cũng giống setq ko ra đc kết quả, vậy phải làm sao ra đc kết quả rùi mới khử nhỉ, em cung thử để cuối cùng cũng vậy. HELPPPPPPPPPPPPP

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

thật thì em chưa thông :D, lsp đọc từ trên xuống thì anh Ket có dạy nhưng .vd: nó đọc đến dòng (tichbaso x y z ) dòng tip theo là định nghĩa hàm tichbaso ở dưới theo em thì cũng có thể chứ lúc đó nó ko pit sau đó đã định nghĩa sẽ pit chứ nhỉ ^^, như cách trả lời của em có phần nào đúng ko mấy anh, vì định nghĩa hàm nằm trong thân thủ tục nên nó ko hỉu phải để nó độc lập để khi load nó load cái định ngĩa lun, còn thủ tục khi mình nhập lệnh trên dòng CM nó mới bắt đầu chạy từ trên xuống ^^

Còn câu 2 khử biến thì em pit còn như anh nói khử hàm cũng vậy , như em ko rõ khử theo cách nào, anh Ket cũng hướng dẫn giống anh, nếu setq cho nó nil thì khi chạy lsp nó ko cho ra đc kết quả chỉ nhập số đc thui, chó nó thành biến cục bộ mà ko pit để ở đâu để ở dòng defun thì cũng giống setq ko ra đc kết quả, vậy phải làm sao ra đc kết quả rùi mới khử nhỉ, em cung thử để cuối cùng cũng vậy. HELPPPPPPPPPPPPP

Câu 1 : Như thế này :

dòng (tichbaso x y z ) -> Gọi hàm tichbaso nhưng mà hàm tichbaso không có tác dụnghàm tichbaso được định nghĩa dưới dòng (tichbaso x y z ) -> Lisp không hiểu hàm tichbaso được định nghĩa như thế nào nên mới có dòng báo này: no function definition: TICHBASO

 

Hàm tichbaso đã định nghĩa (defun tichbaso ( a b c) .....chỉ có hiệu lực khi ta gọi nó mà bạn gọi nó không kêu => tức là hàm tichbaso không có hiệu lực mà vì sao hàm tichbaso không có hiệu lực? là vì hàm tichbaso được định nghĩa dưới dòng (tichbaso x y z )

- Chắc bạn đã thông....

 

Câu 2 : Cách "khử"

(defun (/ x y z tichbaso)

;;;;;;

)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

anh Tue_Vn ơi cách này em cũng thử lun rùi cũng ko ra đc nó báo lỗi thừa tham số, vậy em mới bí, em đã để đủ kiểu trên dưới, giữa cục bộ setq đều ko đc hihi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

Tự rút ra kết luận nhé!

(defun c:test (/ x y z tichbaso)
(setq x (getint "\nNhap so 1:"))
(setq y (getint "\nNhap so 2:"))
(setq z (getint "\nNhap so 3:"))
(defun tichbaso ( a b c)
(* a b c)
)
(tichbaso x y z)
);_end defun test

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

oh Thank Anh DVH nhiều lắm, chắc ý anh Tue_VN giống anh mà em ngộ ko ra, để em giải thích mấy anh xem em suy luận đúng ko hen.

Như anh DVH viết thì có nghĩa là theo nguyen tắc chạy từ trên xuống, trong dòng defun C: hàm nó đc xét vào thành biến cục bộ sau dấu "/" sẽ bị khử khỏi bộ nhớ, vậy là khi ta đổi vị trí dòng (tichbaso x y z) và dòng (defun tichbaso ( a b c) .....) , cad nó sẽ hiểu là khi load cad nó đã đc định nghĩa hàm sau đó nó mới gọi (tichbaso x y z), như anh Ket gợi ý em, phải giới thiệu thằng bạn trước thì khi gọi cad nó pit thằng đó là thằng nào mà gọi ^^. Vậy suy nghĩ trên của em cũng sai rùi hihi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.678

... như anh Ket gợi ý em, phải giới thiệu thằng bạn trước thì khi gọi cad nó pit thằng đó là thằng nào mà gọi ^^. Vậy suy nghĩ trên của em cũng sai rùi hihi.

 

... cái gì có rồi thì mới đem ra xài được, cái gì chưa có thì chưa đem ra xài được. Áp dụng vào lisp này cũng thế.

2 ý trên là giống nhau.

Bác Tue_NV đã chỉ bạn chi li rứa mà bạn không hiểu đó thôi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Namvanvo    42

 

Tự rút ra kết luận nhé!

(defun c:test (/ x y z tichbaso)
(setq x (getint "\nNhap so 1:"))
(setq y (getint "\nNhap so 2:"))
(setq z (getint "\nNhap so 3:"))
(defun tichbaso ( a b c)
(* a b c)
)
(tichbaso x y z)
);_end defun test

Chào a Ha, trong lisp trên em có chỗ không hiểu là tại sao ban đầu mình setq cho x, y, z mà xuống dưới lại defun tichbaso (a b c)? mình defun tichbaso (x y z) thì có được hay không?

Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×