Слова из файла поместить в 2 списка - Prolog
Формулировка задачи:
Доброго времени суток. Помогите решить проблему.
Каждая строка текстового файла f2 (вложение №1) состоит из пары слов. Все первые слова поместить в один список, все вторые - в другой.
Написал код.
Добавил вывод, чтобы увидеть результат (вложение №2).
Конечно, можно после преобразования (предикат preobraz) удалять последний элемент из списка первых слов, но наверно есть другой выход? Как изменить код, чтобы предикат get_all_words1 одинаково корректно работал при обоих его вызовах? Почему этот косяк вообще возникает?
Решение задачи: «Слова из файла поместить в 2 списка»
textual
Листинг программы
goal:- see('f2.txt'), get_all_words1(L), seen, preobraz(L, [], LL), split(LL, AA, BB), write(AA), write(BB). get_word(C1,S):-char_type(C1,white),!,S=[]. get_word(C1,S):-char_type(C1,end_of_line),!,S=[]. get_word(C1,S):-char_type(C1,end_of_file),!,S=[]. get_word(C1,S):-char_code(C1,Code),S=[Code|SS],get_char(CC),get_word(CC,SS). get_all_words1(X):-get_char(C),get_word(C,H),H\=[],!,X=[H|Tail],get_all_words1(Tail). get_all_words1([]). preobraz([],S,S). preobraz([Head|Tail],S,SS):-string_to_list(A,Head),append(S,[A],S1),preobraz(Tail,S1,SS). split([H1,H2|T], [H1|T1], [H2|T2]) :- !, split(T, T1, T2). split(L, L, []).
Объяснение кода листинга программы
- Задача программы - прочитать слова из файла f2.txt и разбить их на два списка: один - с отрицательными словами, другой - со всеми остальными.
- Код начинается с функции goal, которая содержит основную логику программы. Функция see('f2.txt') используется для открытия файла и чтения его содержимого.
- Функция get_all_words1(L) используется для получения всех слов из содержимого файла и сохранения их в списке L.
- Функция preobraz(L, [], LL) используется для предварительной обработки списка L. В данном случае, если список пуст, то он просто возвращает пустой список. Если в списке есть элементы, то они преобразуются в строки и добавляются в новый список LL.
- Функция split(LL, AA, BB) используется для разделения списка LL на два списка: AA и BB. В данном случае, список LL разделяется на две части по символу '|'.
- Функции get_word(C1,S) и get_char(C) используются для чтения символов из файла и создания слов из этих символов.
- Функция get_all_words1(X) используется для рекурсивного получения всех слов из содержимого файла и сохранения их в списке X.
- Функция preobraz([],S,S) используется для обработки случая, когда список пуст. В этом случае, он просто возвращает пустой список.
- Функция preobraz([Head|Tail],S,SS) используется для обработки случая, когда список не пуст. В этом случае, первый элемент списка (Head) преобразуется в строку и добавляется в новый список S. Затем, рекурсивно вызывается функция preobraz для оставшейся части списка Tail и нового списка S1.
- Функция split([H1,H2|T], [H1|T1], [H2|T2]) :- используется для разделения списка T на три списка: H1, H2 и T1. В данном случае, список T разделяется на три части по символу '|'.
- Функция split(L, L, []) используется для обработки случая, когда список L пуст. В этом случае, он просто возвращает пустой список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д