|
|
1.1 ! root 1: (* state searching module *) ! 2: ! 3: signature BUFFER = ! 4: sig ! 5: type 'a buffer ! 6: exception EMPTY ! 7: val empty: 'a buffer ! 8: val get: 'a buffer -> 'a * 'a buffer ! 9: val put: 'a * 'a buffer -> 'a buffer ! 10: end ! 11: ! 12: signature STATE_SPACE = ! 13: sig ! 14: type state ! 15: val goal: state -> bool ! 16: val moves: state -> state list ! 17: end ! 18: ! 19: signature SEARCH = ! 20: sig ! 21: structure States: STATE_SPACE ! 22: val search: States.state -> unit ! 23: end ! 24: ! 25: functor Search(structure States: STATE_SPACE and Buffer: BUFFER): SEARCH = ! 26: struct ! 27: ! 28: structure States = States ! 29: ! 30: open States Buffer ! 31: ! 32: fun search state = ! 33: let fun try pending = ! 34: let val (current,pending) = get pending ! 35: in if goal current ! 36: then (print "found"; ()) ! 37: else try(fold put (moves current) pending) ! 38: end ! 39: in try(put(state,empty)) ! 40: handle EMPTY => (print "failed"; ()) ! 41: end ! 42: ! 43: end (* Search *)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.