0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 2
1

Предикат, записывающий каждый третий элемент списка в новый список

07.01.2016, 22:08. Показов 1516. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Прошу помочь с написанием придиката, который будет записывать каждый третий элемент в новый список. Пишу в visual prolog 7.5. Собственными силами получила следующий код, но увы он не работает. Помогите исправить
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
% Copyright
 
implement main
    open core, console, string
 
class predicates
copy_th: (integer*, integer,  integer*) nondeterm anyflow.
 
clauses
copy_th([],_,[]).
copy_th([H|T], Pos, Res):- Pos mod 3 = 0,  copy_th(T, Pos+1, Res1), Res1 = [H|Res].
copy_th([H|T], Pos, Res):- Pos mod 3 <>0,  copy_th(T, Pos+1, Res).
 
clauses
    run() :-
        init(),
        L = [1, 2, 3, 4, 5, 6, 7, 8, 9],
        %M = [],
        copy_th(L, 0, Res),
        write(L), nl,
        write(Res), nl,
        _=readLine(),*!;
        _=readLine().
 
end implement main
 
goal
    console::run(main::run).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2016, 22:08
Ответы с готовыми решениями:

Cписок: Предикат: del2(L1, L2). Удаляет из исходного списка L1 каждый второй элемент, результирующий список L2.
Помогите решить: Предикат: del2(L1, L2). Удаляет из исходного списка L1 каждый второй элемент,...

Формировать список, в котором отсутствует каждый третий элемент исходного списка
Моя работает неправильно.Помогите найти ошибку.пользоваться можно только car cdr cons (defun...

Предикат, умножающий каждый элемент списка на заданное число
Определите предикат mnoz, умножающий каждый элемент числового списка на заданное число, например,...

Удалить каждый третий элемент из списка
Написать прогу создания и обработки списка(беда), каждый элемент которого ссылается на предыдущий и...

2
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.01.2016, 03:24 2
Лучший ответ Сообщение было отмечено ВикаКарл как решение

Решение

1) Во втором правиле нужно с точностью до наоборот: Res = [H|Res1]
Причём, обычно это записывают прямо в заголовке правила:
Prolog
1
copy_th([H|T], Pos, [H|Res]):- Pos mod 3 = 0, copy_th(T, Pos+1, Res).
2) При Вашей нумерации предикат будет выбирать [1,4,7], что не совсем по условию
Нужно либо менять начальный индекс, либо остаток для сравнения

3) Если не нужна универсальность, можно проще, без индексов:
Prolog
1
2
3
4
copy_th([_,_,H|T1], [H|T2]) :-
    !,
    copy_th(T1, T2).
copy_th(_, []).
1
0 / 0 / 0
Регистрация: 21.09.2015
Сообщений: 2
08.01.2016, 11:08  [ТС] 3
Спасибо большое. Все работает
0
08.01.2016, 11:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2016, 11:08
Помогаю со студенческими работами здесь

Выбрать из списка каждый третий элемент
Выбрать из списка каждый третий элемент и возвратить их в новый список. Помогите пожалуйста, совсем...

Функция: удалить каждый третий элемент списка
Определить функцию, удаляющую из списка каждый третий элемент и возвращающую в качестве значения...

Возвести в квадрат каждый третий элемент списка
Помогите с зачетом! Нужно написать функцию, возводящую в квадрат каждый третий элемент списка....

Lisp -> Erlang: удалить каждый третий элемент списка
удалить каждый 3-тий элемент списка пример что должно получиться: &gt;(name ‘(a s d q w e z x...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru