Đến nội dung


Hình ảnh
* * * * - 7 Bình chọn

[Hỏi]Đố vui với LISP


  • Please log in to reply
391 replies to this topic

#121 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 October 2011 - 06:37 PM

Không yêu cầu ngắn hay dài hơn đáp án, nên tạm thời ta dùng :

(setq a (car (vl-remove a (list a nil 100))))

:D
  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#122 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 01 October 2011 - 08:55 PM

Không yêu cầu ngắn hay dài hơn đáp án, nên tạm thời ta dùng :
Hình đã gửi


Kexu hay quá. Nhưng cái a trong list chắc không cần đến,
ý đồ của npham là thay cái if để đơn giản hóa sự lằng nhằng của cái rẻ nhánh , chẳng hạn bác nào có thể đơn giản cái đoạn sau không?:

(if
(setq a (getreal "\na:"))
(if
(setq b (getreal "\nb:"))
(if
(setq c (getreal "\nc:"))
(+ a b c)
)
)
)



Một câu khác, Hãy tính tổng giá trị của tất cả các phần tử trong tất cả các list sau: (l1 +...+l5)

(setq l1 '(1))
(setq l2 '(10 20))
(setq l3 '(100 200 300))
(setq l4 '(1000 2000 3000 4000))
(setq l5 '(10000 20000 30000 40000 50000))


  • 0

#123 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 October 2011 - 08:57 PM

Tương tự như Ketxu vậy nhưng khác 1 chút :
(setq a (car(vl-remove nil (list nil a 100))))

  • 0

#124 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 October 2011 - 09:08 PM

Kexu hay quá. Nhưng cái a trong list chắc không cần đến,

Đúng là cái a không cần đến, lúc trả lời câu hỏi Ket k test CAD mà cứ cho a vào đấy để clear nó đi trước khi setq, thật ngớ ngẩn làm sao ^^

2 câu bài vừa rồi :
1- Thường thì người ta dùng AND chứ ít ai dùng như trên ^^ :

(if
(and (setq a (getreal "\na:"))
(setq b (getreal "\nb:"))
(setq c (getreal "\nc:"))
)
(+ a b c)
)

Để tùy biến thêm List thì có thể dùng :

(apply '+ (mapcar '(lambda(x)(set x (getreal (strcat "\n" (vl-princ-to-string x))))) '(a b c)))


2-

(apply '+ (append l1 l2 l3 l4 l5))

Hoặc :

(apply '+ (mapcar '(lambda(x)(apply '+ x)) (list l1 l2 l3 l4 l5)))


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#125 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 01 October 2011 - 09:20 PM

Tương tự như Ketxu vậy nhưng khác 1 chút :
(setq a (car(vl-remove nil (list nil a 100))))

Sao nó luôn trả về 100?
@npham: sao bạn đố mà người ta trả lời hay cũng chẳng thấy bạn thưởng thank?
  • 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.


#126 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 01 October 2011 - 09:28 PM

Sao nó luôn trả về 100?
@npham: sao bạn đố mà người ta trả lời hay cũng chẳng thấy bạn thưởng thank?


Mấy bác toàn cao thủ không. Thank chắc cả ngày . hehe. Nói chơi thôi. Để thank cái.

@Kexu: Đã AND sao bác không AND hết luôn?

(and
(setq a (getreal "\na:"))
(setq b (getreal "\nb:"))
(setq c (getreal "\nc:"))
(+ a b c)
)


  • 0

#127 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 October 2011 - 09:34 PM

@Kexu: Đã AND sao bác không AND hết luôn?

Nếu AND luôn như bác thì kết quả trả về T hoặc Nil, chứ không trả về kết quả hàm tổng (+ a b c). Nếu muốn ghi như bác thì cần (setq sum (+ a b c)) để sau này còn nắm cổ nó :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#128 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 October 2011 - 06:51 AM

....
Một câu khác, Hãy tính tổng giá trị của tất cả các phần tử trong tất cả các list sau: (l1 +...+l5)

Hoặc :
(eval (append '(+) l1 l2 l3 l4 l5))

@DoanVanHa :
(not a) -> T
(setq a (car(vl-remove nil (list a 100)))) -> 100
(setq a 50)
(setq a (car(vl-remove nil (list a 100)))) -> 50
Cái của Ketxu bỏ a ra khỏi List thì cái này bỏ NIL ra khỏi List vậy :)
  • 0

#129 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 02 October 2011 - 07:16 AM

Hoặc :
(eval (append '(+) l1 l2 l3 l4 l5))

@DoanVanHa :
(not a) -> T
(setq a (car(vl-remove nil (list a 100)))) -> 100
(setq a 50)
(setq a (car(vl-remove nil (list a 100)))) -> 50
Cái của Ketxu bỏ a ra khỏi List thì cái này bỏ NIL ra khỏi List vậy Hình đã gửi


Theo câu đố gốc thì chỉ trả ra kết quả nil hoặc 100 thôi bác.
(setq a 50)
(if (not a) (setq a 100)(setq a nil)) -> nil
(setq a T)
(if (not a) (setq a 100)(setq a nil)) -> nil


Thêm 1 câu đố nữa:
Cho 3 điểm p1 p2 p3 bất kỳ, và điểm p0 nằm ngoài mặt phẳng m tạo bởi p1 p2 p3
gọi d là đường thẳng đi qua p0 và vuông góc với mặt phẳng m
Hãy tìm điểm giao của đường thẳng d với mặt phẳng m
  • 0

#130 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 October 2011 - 09:29 AM

@npham : mọi người hì hụi trả lời mà cũng chưa thấy bác đưa ra các đáp án của mình để so sánh ?????
Còn câu hỏi bên trên :

(defun ST:Point_On_Plane ( pt p1 p2 p3 )
(or cal (arxload "geomcal"))
(setq nor (cal "nor(p1,p2,p3)"))
(setq pt (trans pt 0 nor)
p1 (trans p1 0 nor)
)
(trans (list (car pt) (cadr pt) (caddr p1)) nor 0)
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#131 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 October 2011 - 10:12 AM

Khác Ketxu chút xíu, chơi toàn CAL

(defun HA(pt p1 p2 p3 / vt pt1)
(or cal (arxload "geomcal"))
(setq vt (cal "nor(p1,p2,p3)"))
(setq pt1 (cal "pt+vt"))
(cal "ilp(pt,pt1,p1,p2,p3)"))

  • 2

* 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.


#132 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 02 October 2011 - 10:49 AM

Expression nor của cal có thể nên thay bằng

(setq nor
(list (- (* (cadr (setq x (mapcar '- P2 P1)))(caddr (setq y (mapcar '- P3 P2)))) (* (caddr x)(cadr y)))
(- (* (caddr x)(car y)) (* (car x)(caddr y)))
(- (* (car x)(cadr y)) (* (cadr x)(car y)))
)
)


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#133 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 02 October 2011 - 02:40 PM

@npham : mọi người hì hụi trả lời mà cũng chưa thấy bác đưa ra các đáp án của mình để so sánh ?????


Hehe, hai bác thông cảm, "thầy" này gà mờ quá nên đang học hỏi mấy bài giải của các "thí sinh".

Câu đố l1+..+l5: lời giải (appy '+ (append l1...l5)) của kexu là đơn giản nhất và trùng ý của npham
câu tìm điểm giao nPham thich cách của DVH hơn, nó dễ hiểu hơn.

Thanks cả 2 bác.
  • 0

#134 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 October 2011 - 02:04 PM

Mời các bạn viết code để gọi dialoge "HA" của file dcl đính kèm!
http://www.cadviet.c...iles/3/ha_2.zip
  • 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.


#135 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 13 October 2011 - 03:47 PM

(ACET-UI-MESSAGE "Doan Van Ha" "CADViet.com")


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#136 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 October 2011 - 03:59 PM

Trước hết, chúc mừng Ketxu bước qua tuổi thank 1000, sau nữa "chê' một cái là hay lợi dụng sự sơ hở của người khác. Muốn có cách gọi "chính thống" để gọi dialoge "HA" kia (tức là khi giả dụ nó không phải là ": text {").
  • 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.


#137 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 13 October 2011 - 04:08 PM

Thực ra thì bác bảo gọi cái Dialog có hình như vậy thì xài luôn, chứ bác bảo

Muốn có cách gọi "chính thống" để gọi dialoge "HA"

thì e thú thực không biết ý bác là sao ?? Là gọi cái hộp thoại HA đã được viết sẵn đó lên á ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#138 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 October 2011 - 04:22 PM

Thực ra thì bác bảo gọi cái Dialog có hình như vậy thì xài luôn, chứ bác bảo
thì e thú thực không biết ý bác là sao ?? Là gọi cái hộp thoại HA đã được viết sẵn đó lên á ?

đúng vây, tức là gọi kiểu (setq dcl_id (load_dialog "HA.dcl")).......
  • 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.


#139 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 13 October 2011 - 04:37 PM

Khác Ketxu chút xíu, chơi toàn CAL


(defun HA(pt p1 p2 p3 / vt pt1)
(or cal (arxload "geomcal"))
(setq vt (cal "nor(p1,p2,p3)"))
(setq pt1 (cal "pt+vt"))
(cal "ilp(pt,pt1,p1,p2,p3)"))

Hề hề hề,
Cái thằng Cal này cũng lắm tài ghê nhỉ???
Còn cái thẳng "nor (p1,p2,p3)" thì giờ mới thấy mặt.
Hề hề hề.
Cái vụ ni nếu mình nhớ không lầm thì hình như bác NPham cũng đã tham gia làm khi giải cái đề tài nội suy mặt phẳng của bạn chi chi đó rùi mà.
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#140 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 13 October 2011 - 04:50 PM

đúng vây, tức là gọi kiểu (setq dcl_id (load_dialog "HA.dcl")).......

Hề hề, thế thì e chịu thua, vì Load_dialog là cách duy nhất e biết ^^
P/s : "chê" bác về cách trình bày vấn đề
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC