Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Alexey_Scherbak
4 / 4 / 1
Регистрация: 13.05.2013
Сообщений: 114
#1

Вывести каждый элемент списка на новой строке - Prolog

14.10.2015, 09:21. Просмотров 714. Ответов 11
Метки нет (Все метки)

Интерпритация - swi-prolog
Prolog
1
2
3
4
5
6
7
8
dogs(["лайка","борзая","дог","болонка"]).
/*
 Разделение на голову и хвост
 [Head|Tail]
*/
print_dogs([]).
print_dogs([X|Y]) :- write(X),nl,
print_dogs([Y]).
Выводит на запрос
?- dogs(X), print_list(X).
[]
..
[]
А должен
?- dogs(X), print_list(X).
лайка
...
болонка
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2015, 09:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести каждый элемент списка на новой строке (Prolog):

Разделить каждый элемент списка на 2
дан список элементы которого натуральные числа. разделить каждый элемент на 2

Функция, удаляющая из списка каждый k-ый элемент
Помогите пожалуйста. Опишите функцию, удаляющую из списка каждый k-ый элемент.

Умножить каждый элемент заданного списка на 2
Дан список, элементы которого натуральные числа. Умножить каждый элемент на 2....

Скопировать каждый n-ный элемент списка
Помогите пожалуйста решить следующую задачу: everyNth(N, List1, List2)...

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

Сколько раз каждый элемент списка встречается в дереве?
на входе дерево, причём любое(не обязательно бинарное!, дерево в виде списка) и...

11
Aleator
65 / 60 / 5
Регистрация: 04.05.2011
Сообщений: 1,222
14.10.2015, 11:36 #2
Лучший ответ Сообщение было отмечено Alexey_Scherbak как решение

Решение

Prolog
1
2
3
4
5
6
7
dogs(['лайка','борзая','дог','болонка']).
 
% Разделение на голову и хвост
% [Head|Tail]
 
print_dogs([]):- !.
print_dogs([X|Y]):- writeln(X), print_dogs(Y).
2
Aleator
65 / 60 / 5
Регистрация: 04.05.2011
Сообщений: 1,222
14.10.2015, 11:39 #3
Тестирование
1
Миниатюры
Вывести каждый элемент списка на новой строке  
arlat
356 / 356 / 67
Регистрация: 07.10.2013
Сообщений: 789
15.10.2015, 13:34 #4
Prolog
1
2
3
4
5
6
7
8
:- set_prolog_flag(double_quotes, string).
 
dogs(["лайка","борзая","дог","болонка"]).
 
print_dogs([]).
print_dogs([X|Y]) :-
    write(X), nl,
    print_dogs(Y).
1
Alexey_Scherbak
4 / 4 / 1
Регистрация: 13.05.2013
Сообщений: 114
17.10.2015, 10:28  [ТС] #5
таак, а что делает :- set_prolog_flag(double_quotes, string).

Добавлено через 2 часа 41 минуту
Понял, по умолчанию в двойных кавычках не обязательно сроки, а
Prolog
1
:- set_prolog_flag(double_quotes, string).
принудительно задаёт значениям, в двойных кавычках тип string.
А почему в других программах не надо было это указывать, всё и так работало?
0
arlat
356 / 356 / 67
Регистрация: 07.10.2013
Сообщений: 789
17.10.2015, 17:41 #6
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
А почему в других программах не надо было это указывать, всё и так работало?
И для SWI уже не надо указывать, но раньше, и во многих других реализациях, двойные кавычки указывали на список кодов. Это и сейчас удобно, если работать с DC-грамматиками, например. Predicate current_prolog_flag/2 Ну, такова особенность... Плюс, подчёркнуто, т.к. Aleator преобразовал ваш dogs к списку атомов, может версия Prolog другая.
0
Black Fregat
2396 / 1211 / 327
Регистрация: 31.05.2009
Сообщений: 4,805
18.10.2015, 02:39 #7
Цитата Сообщение от arlat Посмотреть сообщение
может версия Prolog другая
Там вроде совсем недавно по этому вопросу сделали какие-то перестановки, успел уже наступить на эти грабли.. Не просветите ли кратко - что именно поменяли и с какой версии?
0
arlat
356 / 356 / 67
Регистрация: 07.10.2013
Сообщений: 789
18.10.2015, 12:13 #8
Цитата Сообщение от Black Fregat Посмотреть сообщение
что именно поменяли и с какой версии
5 SWI-Prolog extensions В какой-то из стабильных 6.x.x сделали по умолчанию, дабы облегчить переход на 7.x
Цитата Сообщение от Black Fregat Посмотреть сообщение
успел уже наступить на эти грабли
Надо следить... Если предполагается разная обработка, но удобно в коде двойные кавычки, сразу ставлю в начале файла директиву
Prolog
1
:- set_prolog_flag(double_quotes, string).
потом, где надо
Prolog
1
:- set_prolog_flag(double_quotes, codes).
потом возвращаю в string, а что делать... До кучи ещё частенько
Prolog
1
:- style_check(-atom).
чтобы на большую строку, типа SQL-запроса, не ругался, и, не ставить \с для лучшего вида Character Escape Syntax и Predicate style_check/1
2
Alexey_Scherbak
4 / 4 / 1
Регистрация: 13.05.2013
Сообщений: 114
19.10.2015, 06:32  [ТС] #9
У меня получается 7
Bash
1
2
3
4
5
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit [url]http://www.swi-prolog.org[/url] for details.
0
arlat
356 / 356 / 67
Регистрация: 07.10.2013
Сообщений: 789
19.10.2015, 09:33 #10
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
У меня получается 7
Да, и, к тому же, стабильная версия. У кого нет специфики, типа использование, как встроенной системы, то можно смело переходить на 7.2.3. Единственное, что надо отслеживать, 32 bits или 64 bits, если распространять... что собственно и для 6.x.x так же.
0
Alexey_Scherbak
4 / 4 / 1
Регистрация: 13.05.2013
Сообщений: 114
19.10.2015, 17:40  [ТС] #11
под встроенной Вы имеете ввиду использование в приложениях на pyton/C++...?
0
arlat
356 / 356 / 67
Регистрация: 07.10.2013
Сообщений: 789
19.10.2015, 17:44 #12
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
под встроенной Вы имеете ввиду использование в приложениях на pyton/C++
Да, хотя и в этом случае вряд ли будут проблемы с 7.2.3. Все ведь, как обычно, и хотел бы на новую версию, а нельзя, если промышленная эксплуатация нормально работает и на 6.6.6
0
19.10.2015, 17:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2015, 17:44
Привет! Вот еще темы с решениями:

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

Предикат, записывающий каждый третий элемент списка в новый список
Здравствуйте. Прошу помочь с написанием придиката, который будет записывать...

Swi prolog Возведите в квадрат каждый третий элемент списка
Здравствуйте. Есть задача: "Возведите в квадрат каждый третий элемент списка."...

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


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

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

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