Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.11.2019
Сообщений: 3

Visual Prolog. Работа со списками и строками. Поиск слов

25.03.2020, 11:42. Показов 3371. Ответов 4

Студворк — интернет-сервис помощи студентам
Задание: "Задан в файле текст, в котором встречаются слова с повторяющимися буквами (например: программа, коммуна и т.д.). Следует сформировать из него список из таких слов. Результат записать в файл."
Сейчас написал программу, которая считывает из файла строки в список, но не знаю, как произвести поиск слов с повторяющимися буквами. На каком-нибудь императивном языке просто перебрать в цикле каждое слово, сравнивая две соседние буквы [i] и [i+1], и если они совпадают, то такое слово в один список, а если ни разу не совпали, то в другой. Но как сделать это на прологе?

Код прикрепил файлом.
Вложения
Тип файла: txt код.txt (1.7 Кб, 11 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2020, 11:42
Ответы с готовыми решениями:

Работа со списками в Visual Prolog 7.2
Доброго времени. После пары суток бесплодного поиска, обращаюсь к вам за помощью. Не смог найти примеров на работу со списками. Задача...

Помогите со списками (Visual Prolog)
Доброго времени суток. Если кто может, помогите, пожалуйста реализовать: 1) Выделить подсписки, содержащие цифру 3 и объединить их. 2)...

Prolog. Работа со списками
У кого-нибудь есть какие-то идеи насчет этой задачи? :) Или хотя бы натолкните, пожалуйста, на мысль :) А то идей вообще нету :( Условие:...

4
0 / 0 / 0
Регистрация: 09.11.2019
Сообщений: 3
25.03.2020, 11:57  [ТС]
Нужна помощь именно с написанием предиката dev_to_2_lists(LL, L1, L2), остальное всё сам сделаю (надеюсь)

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
implement main
    open core, console, string
 
domains
    float = real.
 
class predicates
    read_input : (inputStream, string** [out]).
    string_to_list : (string, string* [out]).
    list_to_string : (string*, string [out]).
    dev_to_2_lists : (string** List [input], string** L1 [out], string** L2 [out]).
 
clauses
    read_input(In, []) :-
        In:endOfStream(),
        In:close(),
        !.
    read_input(In,[List | Tail]) :-
        S = In:readLine(),
        string_to_list(S, List),
        !,
        read_input(In, Tail).
 
    string_to_list(S, [H | Tail]) :-
        fronttoken(S, H, S1),
        !,
        string_to_list(S1, Tail).
    string_to_list(_, []).
 
    list_to_string([], "").
    list_to_string([H | T], S) :-
        list_to_string(T, SS),
        SSS = string::concat(" ", SS),
        S = string::concat(H, SSS).
 
    dev_to_2_lists(LL, L1, L2) :-
        %Здесь должны формироваться два списка L1 и L2. Но не знаю как. А чтоб не были пустыми, то по паре элементов в каждый добавлю.
        L1 = [["P", "r", "o", "g", "r", "a", "m", "m"], ["s","s","s", "0"]],
        L2 = [["s", "1"], ["s", "2"]].
 
    run() :-
        init(),
        In = inputStream_file::openFile8("InFile.txt"),
        read_input(In, LL),
        write(LL),
        nl,
        Out = outputStream_file::create8("OutFile.txt"),
        dev_to_2_lists(LL, L1, L2), %LL - основной список, L1 - список с двойными буквами (напр "programm"), L2 - список с остальными словами
        write("Cлова с повторяющимися буквами: ", L1),
        nl,
        nl,
        write("Остальные слова: ", L2),
        _ = readLine().
 
end implement main
 
goal
    mainExe::run(main::run).
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
25.03.2020, 15:15
Лучший ответ Сообщение было отмечено Archi2 как решение

Решение

Цитата Сообщение от Archi2 Посмотреть сообщение
просто перебрать в цикле каждое слово, сравнивая две соседние буквы [i] и [i+1], и если они совпадают, то такое слово в один список, а если ни разу не совпали, то в другой
так и на прологе, только в рекурсии

Добавлено через 38 минут
Кликните здесь для просмотра всего текста
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
implement main
    open core, console, string
 
domains
 
class predicates
    read_input : (inputStream, string** [out]).
    string_to_list : (string, string* [out]).
    %list_to_string : (string*, string [out]).
    dev_to_2_lists : (string* List, string* L1 [out], string* L2 [out]).
    is_double_char : (string Word) determ.
    is_double_char_ : (char* Chars) nondeterm.
 
clauses
    read_input(In, []) :-
        In:endOfStream(),
        In:close(),
        !.
    read_input(In,[List | Tail]) :-
        S = In:readLine(),
        string_to_list(S, List),
        !,
        read_input(In, Tail).
 
    string_to_list(S, [H | Tail]) :-
        fronttoken(S, H, S1),
        !,
        string_to_list(S1, Tail).
    string_to_list(_, []).
/*
    list_to_string([], "").
    list_to_string([H | T], S) :-
        list_to_string(T, SS),
        SSS = string::concat(" ", SS),
        S = string::concat(H, SSS).
*/
    dev_to_2_lists([], [], []).
    dev_to_2_lists([H | T], [H | L1], L2) :-
        is_double_char(H),
        !,
        dev_to_2_lists(T, L1, L2).
    dev_to_2_lists([H | T], L1, [H | L2]) :-
        !,
        dev_to_2_lists(T, L1, L2).
 
    is_double_char(Word) :-
        Chars = toCharList(Word),
        is_double_char_(Chars),
        !.
    is_double_char_([H, H | _]).
    is_double_char_([_ | T]) :-
        is_double_char_(T).
 
    run() :-
        init(),
        In = inputStream_file::openFile8("InFile.txt"),
        read_input(In, LL),
        write(LL),
        nl,
        Out = outputStream_file::create8("OutFile.txt"),
        foreach X in LL do
            dev_to_2_lists(X, L1, L2),
            write("Cлова с повторяющимися буквами: ", L1),
            nl,
            write("Остальные слова: ", L2),
            nl
        end foreach,
        _ = readLine(),
        !.
 
end implement main
 
goal
    mainExe::run(main::run).
1
0 / 0 / 0
Регистрация: 09.11.2019
Сообщений: 3
27.03.2020, 10:23  [ТС]
Спасибо большое!
0
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 94
20.03.2021, 18:08
как это может выглядеть без foreach?
Почему-то не работает вывод в файл, пробовал исправить, не вышло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2021, 18:08
Помогаю со студенческими работами здесь

Работа со списками (Turbo Prolog 2.0)
Срочно нужна помощь с задачкой по прологу. Зачет на носу. все задачи решила, а с этой прям ступор какой-то... ( Даны список L1,...

Работа со списками в Turbo Prolog
Доброго времени суток тем кто посетил этот топ. Дело собственно вот в чем: Дана задача "Сформировать список L1 из элементов:...

Работа со списками Prolog. Добавление элемента
Я уже зачастил сюда с вопросами по prolog, но ничего не могу поделать штука в край не понятная. Не могу решить вот эту задачу: "В...

Ввод и работа со списками в SWI Prolog
Задание. Обеспечить ввод и формирование двух вещественных списков с проверкой. Найти объединение этих списков. readlist(List):- ...

Работа со списками, строками
Добрый день, подскажите пожалуйста как делается цикл? Сгенерировать список из 6 утверждений (для этого заменить в statement КОМПАНИЯ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru