如何搜索以给定字母开头的单词

时间:2013-05-22 06:00:29

标签: algorithm search prolog

我想在Prolog中实现一个搜索功能,当我输入一个字母时,它会显示建议的字词,从该字母开始动态显示。

作为一个起点,我试图找到一种方法来获取从给定字母开始的单词列表。但我找不到任何可以尝试的东西。

2 个答案:

答案 0 :(得分:2)

这听起来像一个有价值的项目,不仅适合初学者。大多数复杂性都应该被用户交互。你应该细分你的任务 - 首先是:

  • 单词表示
  • 用户互动(什么媒体?)
    • 'next char'收购
    • 列表显示
    • 错误处理?

例如,使用基本的Prolog IO和vanilla单词'database:

word("prolog").
word("programming").
word("algorithm").
word("word").

user_interface(SelectedSoFar, SelectedWord) :-
  % get a sorted set of matched words rest
  (  setof(Rest, Word^(word(Word), append(SelectedSoFar, Rest, Word)), Matched)
  -> (  Matched = [Choosed]  % only 1 choice available ?
     -> append(SelectedSoFar, Choosed, SelectedWord) % terminate
     ;  % display list, get next char, recurse
        forall(member(Rest, Matched), format('~s^~s~n', [SelectedSoFar, Rest])),
        get(C),
        append(SelectedSoFar, [C], ExtendedSel),
        user_interface(ExtendedSel, SelectedWord)
     )
  ;  writeln('no match, retry'),
     append(WithoutLast, [_], SelectedSoFar), % discard last - BUG: swapped arguments
     user_interface(WithoutLast, SelectedWord)
  ).

示例互动:

?- user_interface("",W).
^algorithm
^programming
^prolog
^word
|: w

W = "word".

?- user_interface("",W).
^algorithm
^programming
^prolog
^word
|: p
p^rogramming
p^rolog
|: r
pr^ogramming
pr^olog
|: o
pro^gramming
pro^log
|: g

W = "programming".

编辑:我已经纠正了错误,请注意评论%丢弃最后....

你看到的地方(例如)

|: w

我输入了一个char 一个'回车'。这是一个非常基本的界面......你至少应该接受一个字符串,而不是一个字符串。请参阅Prolog手册。

答案 1 :(得分:0)

您需要的是名为 trie 的数据结构。您可以在

了解它们

任何好的算法书,比如Robert Sedgewick的Algorithms,都会详细介绍。这是Jon Bentley和Robert Sedgewick撰写的一篇可能有用的文章Fast Algorithms for Sorting and Searching Strings

根据其手册, google-fu 建议YAP Prolog有一个built-in trie implementation。以下是关于prolog中的trie实现的讨论:http://computer-programming-forum.com/55-prolog/59e7d719f1e1d18f.htm

我怀疑你会发现在prolog中代表trie相对简单。工作将在字典中填充树。编写一个程序来阅读你的字典并生成trie作为prolog事实将是更难的部分。

相关问题