2011-09-16 15 views

Trả lời

1

Nếu bạn có thể tìm thấy một thực hiện cho các nhà điều hành amb, sau đó bạn có thể làm một cái gì đó như thế này:

(defmacro run (comp time-limit) 
    `(amb comp 
     (progn (delay ,time-limit) 
       nil))) 

Hãy cẩn thận không để nhầm lẫn điều này với các nhà điều hành McCarthy amb. amb nên đánh giá cả hai đối số của nó trong các chuỗi riêng biệt và chọn bất kỳ kết thúc nào trước tiên. Ví dụ, trong Haskell, nó được mô tả trong Data.Unamb.

+1

Cảm ơn. Tôi đã hy vọng cho một thực hiện của amb thực sự :) Hoặc một con trỏ đến một thư viện hiện có. – matejch

1

Tôi sẽ đề nghị sử dụng các đề tài bordeaux, sinh ra một chuỗi để tính toán, và nếu nó không trả về bởi bộ đếm thời gian, gặt luồng và trả về nil.

1

Tìm thấy mã lisp này ra trong tự nhiên mà dường như để làm những gì bạn muốn:

http://www.eurogaran.com/downloads/lisp/limitools/limitime.lsp

tôi đưa ra 'Clozure Common Lisp Version 1.7-r14925M (DarwinX8664)', dán mã lisp ở chỗ trang web vào trình nghe (tất cả được biên dịch) và chạy điều này:

? (with-max-time 1 (print 5)) 

5 
5 
? (with-max-time 1 (sleep 2) (print 5)) 
? (quit) 

Hy vọng điều này sẽ giúp bạn không phải tự mình triển khai.