Đến nội dung


Hình ảnh

Câu đố về lisp


  • Please log in to reply
3 replies to this topic

#1 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 05 March 2009 - 04:38 PM

Trong help của hàm mapcar có VD sau
(setq a 10 b 20 c 30)

sau khi thực hiện lisp sau
(mapcar  '(lambda (x)  (+ x 3) )
(list a b c))
Kết quả trả về là 1 list (13 23 33) nhưng giá trị a, b, c vẫn là 10, 20 và 30
Đố các bạn sửa lisp trên để sau khi thực hiện thì giá trị a, b, c là 13, 23 và 33
  • 0

#2 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 05 March 2009 - 04:45 PM

Trong help của hàm mapcar có VD sau

(setq a 10 b 20 c 30)

sau khi thực hiện lisp sau
(mapcar  '(lambda (x)  (+ x 3) )
(list a b c))
Kết quả trả về là 1 list (13 23 33) nhưng giá trị a, b, c vẫn là 10, 20 và 30
Đố các bạn sửa lisp trên để sau khi thực hiện thì giá trị a, b, c là 13, 23 và 33

Ôi trời. Câu này bạn hỏi hay bạn đố đấy. bạn thêm (mapcar 'set '(a b c)... trước hàm mapcar kia của bạn là được mà :undecided:
Lisp của bạn đâu có thực hiện lệnh gán giá trị cho biến a,b,c nên nó vẫn nguyên giá trị cũ là đúng rồi
  • 1

#3 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 09 March 2009 - 04:33 PM

Để khởi động thì bài 1 thì tương đối đơn giản
Bài 2
giả sử có hàm
(defun f (x) ( + x 3))
Viết hàm mà số lệnh thực hiện trong hàm thay đổi theo argument n (nguyên)
(defun DynamicSet (n f [... ] / ... )
...
)
làm được yêu cầu sau
với n=1 sẽ thực hiện 1 lệnh
(setq a1 (f a1))
..
với n=k sẽ thực hiện k lệnh
(setq a1 (f a1))
(setq a2 (f a2))
...
(setq ak (f ak))
  • 0

#4 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 07 April 2009 - 09:04 AM

Câu đố ra lâu rồi mà không có ai giải đáp cả.
Các bạn xem gợi ý cách giải ở đây:
http://www.cadviet.c...showtopic=10008
  • 0