Annotation of researchv10no/cmd/sml/doc/examples/missionaries/search.sml, revision 1.1.1.1

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 *)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.