Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 07 November 2012 - 12:15 PM

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 >''<
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 07 November 2012 - 12:23 PM

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ế.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 November 2012 - 07:12 AM

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.....
  • 0

#4 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 08 November 2012 - 12:00 PM

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
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 November 2012 - 01:00 PM

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)
;;;;;;
)
  • 1

#6 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 08 November 2012 - 01:36 PM

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
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 08 November 2012 - 01:40 PM

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

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 08 November 2012 - 02:40 PM

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.
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 08 November 2012 - 02:52 PM

... 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.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 24 July 2013 - 03:58 PM

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.


  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5449 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 24 July 2013 - 04:26 PM

x y z cũng OK.

obama putin binladen cũng OK luôn.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.