2011-09-16 2 views

Répondre

1

Si vous pouviez trouver une implémentation pour l'opérateur amb, alors vous pourriez faire quelque chose comme ceci:

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

Veillez à ne pas confondre cela avec l'opérateur McCarthy amb. amb doit évaluer ses arguments dans des threads séparés et choisir celui qui finit le premier. Par exemple, dans Haskell, il est décrit dans Data.Unamb.

+1

Merci. J'espérais une implémentation de amb en fait :) Ou un pointeur vers une bibliothèque existante. – matejch

1

Je suggérerais d'utiliser des threads bordeaux, engendrant un thread pour le calcul, et s'il ne retourne pas par le timer, il récupèrera le thread et retournera nil.

1

trouvé ce code Lisp dans la nature qui semble faire ce que vous voulez:

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

I lancé 'Clozure Version Common Lisp 1.7-r14925M (DarwinX8664)', collé le code Lisp dans ce le site dans l'auditeur (tout compilé), et a couru ceci:

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

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

Espérons que cela vous aidera d'avoir à déployer votre propre.

Questions connexes