Выдавать фразы из БД по начальным буквам

Программирование Помощь с решением задач на Prolog Задачи на строки и файлы Выдавать фразы из БД по начальным буквам

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 9 мес., 2 нед. назад.

  • Автор
    Сообщения
  • #4383
    Васильев Владимир Сергеевич
    Хранитель

    Дана строка (до 64 Кбайт) в текстовом файле.
    Создать динамическую базу предложений данной строки.
    По введенным начальным буквам (фразам) выдавать все предложение на экран.
    Для создания интерфейса использовать стандартные средства.

    Чтобы решить задачу считаем содержимое файла в строку, затем, разделим строку на предложения (получим список предложений). Остается поместить предложения в базу данных и организовать выборку.

    Опишем используемые типы данных и прототипы функций

    domains
      file = text_input_file
      sentences = string*
    database
      sentence_db(string)
    predicates
      load_sentences
      sentences2db(sentences)
      
      task
      
      print_sentences_from(string)

    Предикат load_sentences выполняет загрузку предложений из файла в базу данных, вызывая предикаты рассмотренные ранее и sentences2db для переписывания элементов списка в БД:

      load_sentences:-
        FileName = "/home/rrrfer/input.txt",
        openread(text_input_file, FileName), !,
        readdevice(text_input_file), 
        file2string(text_input_file, String),
        closefile(text_input_file),
        string2sentences(String, Sentences),
        retractall(sentence_db(_)),
        sentences2db(Sentences).
    
      sentences2db([]).
      sentences2db([Head|Tail]):-
        assert(sentence_db(Head)),
        sentences2db(Tail).

    Предикат print_sentences_from перебирает записи базы данных и выводит на экран те из них, которые начинаются с заданной строки (для проверки используется встроенное правило fronttoken):

      print_sentences_from(FirstSymbols):-
        sentence_db(Sentence),
        fronttoken(Sentence, FirstSymbols, _Tail),
        write("Sentence: "), write(Sentence), nl, fail; !.

    Предикат task используется для многократного запроса у пользователя строк, поиск которых надо выполнить в БД:

      task:-
        write("enter first symbols or empty string for exit: "),
        readln(FirstSymbols),
        NOT(FirstSymbols = ""), !,
        print_sentences_from(FirstSymbols),
        task;!.

    Для запуска программы надо выполнить загрузку предложений и передать управление правилу task:

    goal 
      load_sentences, task.

    Вложения:
    1. prolog_sentences_db.png

Для ответа в этой теме необходимо авторизоваться.