Đến nội dung


Hình ảnh
- - - - -

các bác giúp mình dùng hàm vl-remove-if với


  • Please log in to reply
10 replies to this topic

#1 baohiepkt

baohiepkt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 18 April 2011 - 08:55 AM

ví dụ mình có 1 list như sau: ((a 1) (a 20) (1 30))
các bác júp mình tạo list mới: ((a 21) (1 30))
mình đã thử dùng hàm vl-remove-if mà không thể làm đuợc, các bác xem giúp mình nhé!
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 18 April 2011 - 09:26 AM

ví dụ mình có 1 list như sau: ((a 1) (a 20) (1 30))
các bác júp mình tạo list mới: ((a 21) (1 30))
mình đã thử dùng hàm vl-remove-if mà không thể làm đuợc, các bác xem giúp mình nhé!

Bạn phải nêu trường hợp tổng quát. Chứ chỉ mỗi chuyện chuyển list 1 thành thành list 2 thì... thủ công nhanh hơn nhiều.
  • 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.


#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 18 April 2011 - 10:21 AM

Câu trả lời là không làm đuợc với vl-remove-if
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 18 April 2011 - 10:30 AM

ví dụ mình có 1 list như sau: ((a 1) (a 20) (1 30))
các bác júp mình tạo list mới: ((a 21) (1 30))
mình đã thử dùng hàm vl-remove-if mà không thể làm đuợc, các bác xem giúp mình nhé!

Bạn dùng hàm vl-remove chứ không phải vl-remove-if.
Cách làm (vl-remove '(a 1) '((a 1) (a 20) (1 30))) thì kết quả trả nề là ((a 20) (1 30))
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 April 2011 - 11:19 AM

Ý bạn chủ topic là tìm các sub list có car bằng nhau, sau đó cộng giá trị cadr lại, xoá các sublist cũ đi, đồng thời ghi list tổng vào list ban đầu. Việc này chỉ có 1 phần nhỏ dùng đến vl-remove-if thôi
  • 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


#6 baohiepkt

baohiepkt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 18 April 2011 - 01:48 PM

Bạn dùng hàm vl-remove chứ không phải vl-remove-if.
Cách làm (vl-remove '(a 1) '((a 1) (a 20) (1 30))) thì kết quả trả nề là ((a 20) (1 30))

mình làm thế này thì sai ở đâu mà không đuợc thế bạn:
(vl-remove-if '(lambda (x) (= (car x) A)) '((a 1) (a 20) (1 30)))

thank!
  • 0

#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 19 April 2011 - 12:31 AM

mình làm thế này thì sai ở đâu mà không đuợc thế bạn:
(vl-remove-if '(lambda (x) (= (car x) A)) '((a 1) (a 20) (1 30)))
thank!

làm lambda bạn định nghĩa bên trên sẽ tìm tất cả những thằng nào có giá trị đầu tiên = a để cung cấp cho hàm vl-remove-if. 2 thằng đầu tiên thỏa mãn vì thế sẽ bị loại bỏ.kết quả còn lại 1 thằng duy nhất là (1 30)
anh em đang đoán mò cái kết quả bạn muốn thu đuợc đấy. bạn muốn nó là ((a 20) (1 30)) hay ((a 21) (1 30)) đúng như bài 1 của bạn.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 April 2011 - 07:50 AM

làm lambda bạn định nghĩa bên trên sẽ tìm tất cả những thằng nào có giá trị đầu tiên = a để cung cấp cho hàm vl-remove-if. 2 thằng đầu tiên thỏa mãn vì thế sẽ bị loại bỏ.kết quả còn lại 1 thằng duy nhất là (1 30)
.....

Bạn đã thử chay chưa?
(vl-remove-if '(lambda (x) (= (car x) A)) '((a 1) (a 20) (1 30)))

(= (car x) A) => Chẳng có anh nào thỏa mãn cả.
  • 1

#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 April 2011 - 08:29 AM

mình làm thế này thì sai ở đâu mà không đuợc thế bạn:
(vl-remove-if '(lambda (x) (= (car x) A)) '((a 1) (a 20) (1 30)))

thank!

Bạn đổi thành như thế này xem sao :

(vl-remove-if '(lambda (x) (= (car x) 'a)) '((a 1) (a 20) (1 30)))


  • 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


#10 baohiepkt

baohiepkt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 19 April 2011 - 08:57 AM

Bạn đổi thành như thế này xem sao :


thank bạn ketxu nhiều nhé! mình mới tập các lệnh của lisp nên không hiểu về nguyên tắc, mình thử lại rồi, được ngon lành!
  • 0

#11 baohiepkt

baohiepkt

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 19 April 2011 - 09:02 AM

minh muon dung vl-remove-if với hai đối tượng như mẫu sau tại sao lại không đuợc bạn nhỉ:
(vl-remove-if '(lambda (x y) (= (car x) (car y))) '((a 1) (a 20) (1 30)))
  • 0