Une explication sur amb ?

Une explication sur amb ? - Divers - Programmation

Marsh Posté le 08-12-2004 à 16:27:09    

Bon alors voilà, je pense qu'il n'y a pas une grande majorité de personnes qui font du scheme ici, mais on ne sait jamais.
 
Je ne comprend pas grand chose a cette macro :
 

Code :
  1. (define-syntax amb
  2. (syntax-rules ()
  3. ((amb e ...)
  4. (let ((+prev-amb-fail amb-fail))
  5. (call/cc
  6. (lambda (+sk)
  7. (call/cc
  8. (lambda (+fk)
  9. (set! amb-fail
  10. (lambda ()
  11. (set! amb-fail +prev-amb-fail)
  12. (+fk 'fail)))
  13. (+sk e)))
  14. ...
  15. (+prev-amb-fail)))))))


 
Je sais qu'elle permet de faire du backtracking sur n'importe quoi en utilisant les continuations mais ca reste quand même tres vague ...
 
Plz help   :hello:

Reply

Marsh Posté le 08-12-2004 à 16:27:09   

Reply

Marsh Posté le 17-03-2009 à 16:33:40    

voici un petit exemple en DrScheme pour illustrer le fonctionnement :
 

Code :
  1. ;; Inspired by:
  2. ;;  http://web.engr.oregonstate.edu/~e [...] _JFP04.pdf
  3. ;;  http://web.engr.oregonstate.edu/~erwig/zurg/
  4. ;;
  5. ;; amb stuff
  6. ;;  http://mitpress.mit.edu/sicp/full- [...] ode88.html
  7. ;;  http://docs.mandragor.org/files/Pr [...] sch016.htm
  8. ;;
  9. (require (planet "amb.scm" ("wmfarr" "amb.plt" 1 0)))
  10. (amb-collect
  11.   (let ((x (amb 1 2 3 4 5 12))
  12.         (y (amb 6 7 8 9 10 3)))
  13.     (if (not (= (+ x y) 15))
  14.         (amb)
  15.         (cons x y))))


 
qui fourni : ((5 . 10) (12 . 3))
 

Chronoklazm a écrit :

Bon alors voilà, je pense qu'il n'y a pas une grande majorité de personnes qui font du scheme ici, mais on ne sait jamais.
 
Je ne comprend pas grand chose a cette macro :
 

Code :
  1. (define-syntax amb
  2. (syntax-rules ()
  3. ((amb e ...)
  4. (let ((+prev-amb-fail amb-fail))
  5. (call/cc
  6. (lambda (+sk)
  7. (call/cc
  8. (lambda (+fk)
  9. (set! amb-fail
  10. (lambda ()
  11. (set! amb-fail +prev-amb-fail)
  12. (+fk 'fail)))
  13. (+sk e)))
  14. ...
  15. (+prev-amb-fail)))))))


 
Je sais qu'elle permet de faire du backtracking sur n'importe quoi en utilisant les continuations mais ca reste quand même tres vague ...
 
Plz help   :hello:


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed