File complete.icn

Summary

###########################################################################

	File:     complete.icn

	Subject:  Procedure to complete partial input string

	Author:   Richard L. Goerwitz

	Date:     August 14, 1996

###########################################################################

   This file is in the public domain.

###########################################################################

	Version:  1.7

###########################################################################

	complete(s,st)	completes a s relative to a set or list of strings, st.
			Put differently, complete() lets you supply a
			partial string, s, and get back those strings in st
			that s is either equal to or a	substring of.

###########################################################################

  Lots of command interfaces allow completion of partial input.
  Complete() simply represents my personal sentiments about how this
  might best be done in Icon.  If you strip away the profuse comments
  below, you end up with only about thirty lines of actual source
  code.

  I have arranged things so that only that portion of an automaton
  which is needed to complete a given string is actually created and
  stored.  Storing automata for later use naturally makes complete()
  eat up more memory.  The performance gains can make it worth the
  trouble, though.  If, for some reason, there comes a time when it
  is advisable to reclaim the space occupied by complete's static
  structures, you can just call it without arguments.  This
  "resets" complete() and forces an immediate garbage collection.
  
 Example code:

      commands := ["run","stop","quit","save","load","continue"]
      while line := read(&input) do {
          cmds := list()
          every put(cmds, complete(line, commands))
          case *cmds of {
              0 : input_error(line)
              1 : do_command(cmds[1])
              default : display_possible_completions(cmds)
          }
          etc...

  More Iconish methods might include displaying successive
  alternatives each time the user presses the tab key (this would,
  however, require using the nonportable getch() routine).  Another
  method might be to use the first string suspended by complete().

  NOTE: This entire shebang could be replaced with a slightly slower
  and much smaller program suggested to me by Jerry Nowlin and Bob
  Alexander.

      procedure terscompl(s, st)
          suspend match(s, p := !st) & p
      end

  This program will work fine for lists with just a few members, and
  also for cases where s is fairly large.  It will also use much less
  memory.

###########################################################################
Procedures:
complete

This file is part of the (main) package.

Source code.

Details
Procedures:

complete(s, st)



This page produced by UniDoc on 2021/04/15 @ 23:59:54.