Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
MahovIV
5 / 6 / 4
Регистрация: 17.09.2013
Сообщений: 337
#1

Формирование списка

15.03.2015, 20:20. Просмотров 595. Ответов 4
Метки нет (Все метки)

Если надо просто перемножить элементы списка - я делаю так:
Prolog
1
2
3
4
5
6
7
8
9
domains
list=integer*
predicates
mul(list,integer,integer).
clauses
mul([],Result,Result).
mul([Head|Tail],Result, Counter):- NewCounter=Counter*Head, mul(Tail,Result,NewCounter).
goal
mul([2,-3,4,-1,2],L,1),write(L),nl,fail.
А как сделать так - чтобы выполнялось условие?
Сформировать список L1 из элементов: произведение всех n элементов, произведение последних (n-1) элементов L и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2015, 20:20
Ответы с готовыми решениями:

Формирование списка с остатками от деления целых чисел из исходного списка на заданное число N
люди помогите пожалуйста!!! Формирование списка с остатками от деления целых...

Формирование списка
Помогите пожалуйста. Составить программу на Прологе. Дан список....

Формирование списка со структурами вида x (y)
Здравствуйте! Помогите,пожалуйста, со следующим заданием: Дан список вида ....

Формирование списка введённого пользователем
Требуется создать оконное приложение в среде Visual Prolog 5.2, приложение...

Формирование списка простых чисел, не превосходящих данного
Доброе время суток. Помогите решить такую задачу: "Формирование списка простых...

4
Catstail
Модератор
23579 / 11679 / 2044
Регистрация: 12.02.2012
Сообщений: 19,057
16.03.2015, 13:48 #2
Турбо-пролог:

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
domains
int=integer
intl=int*
 
predicates
prod(intl,int,int)
len(intl,int)
plist(intl,int,intl)
task(intl,intl)
 
clauses
prod(_,0,1).
prod([H|T],K,P) :- K1=K-1, prod(T,K1,Q), P=H*Q.
 
len([],0).
len([_|T],K) :- len(T,N), K=N+1.
 
plist(_,0,[]).
plist(X,K,[H|T]) :- prod(X,K,H), K1=K-1, plist(X,K1,T).
 
task(X,R) :- len(X,L), plist(X,L,R).
 
goal
task([1,2,3,4,5,6,7],Z),write(Z),nl.
Результат: [5040,720,120,24,6,2,1]
0
MahovIV
5 / 6 / 4
Регистрация: 17.09.2013
Сообщений: 337
16.03.2015, 15:11  [ТС] #3
А вы можете пожалуйста объяснить код (комментариями)?
0
Catstail
Модератор
23579 / 11679 / 2044
Регистрация: 12.02.2012
Сообщений: 19,057
16.03.2015, 15:37 #4
Цитата Сообщение от MahovIV Посмотреть сообщение
Если надо просто перемножить элементы списка - я делаю так:
- если ты "делаешь так", значит умеешь программировать на Прологе. Чего же еще объяснять? Там все просто.
0
MahovIV
5 / 6 / 4
Регистрация: 17.09.2013
Сообщений: 337
16.03.2015, 20:19  [ТС] #5
Извините, я не понимаю, что делают предикаты и как они работают.

Добавлено через 18 секунд
За сам код конечно спасибо.

Добавлено через 7 минут
И еще мне нужно сформировать список L1 из всех перестановок списка L (без дублирования). Как это сделать?
0
16.03.2015, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2015, 20:19

Формирование перевернутого списка с элементами, увеличенными на единицу
1.Составьте предикат, формирующий перевернутый список с элементами,...

Формирование списка знаков препинания, встречающихся в строке
Формирование списка знаков препинания, встречающихся в строке. Буду очень...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru