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

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

14.10.2015, 09:21. Просмотров 1647. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2015, 09:21
Ответы с готовыми решениями:

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

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

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

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

11
100 / 85 / 17
Регистрация: 04.05.2011
Сообщений: 1,327
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
100 / 85 / 17
Регистрация: 04.05.2011
Сообщений: 1,327
14.10.2015, 11:39 3
Тестирование
1
Миниатюры
Вывести каждый элемент списка на новой строке  
647 / 482 / 120
Регистрация: 07.10.2013
Сообщений: 1,128
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
4 / 4 / 0
Регистрация: 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
647 / 482 / 120
Регистрация: 07.10.2013
Сообщений: 1,128
17.10.2015, 17:41 6
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
А почему в других программах не надо было это указывать, всё и так работало?
И для SWI уже не надо указывать, но раньше, и во многих других реализациях, двойные кавычки указывали на список кодов. Это и сейчас удобно, если работать с DC-грамматиками, например. Predicate current_prolog_flag/2 Ну, такова особенность... Плюс, подчёркнуто, т.к. Aleator преобразовал ваш dogs к списку атомов, может версия Prolog другая.
0
3302 / 1925 / 527
Регистрация: 31.05.2009
Сообщений: 6,464
18.10.2015, 02:39 7
Цитата Сообщение от arlat Посмотреть сообщение
может версия Prolog другая
Там вроде совсем недавно по этому вопросу сделали какие-то перестановки, успел уже наступить на эти грабли.. Не просветите ли кратко - что именно поменяли и с какой версии?
0
647 / 482 / 120
Регистрация: 07.10.2013
Сообщений: 1,128
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
4 / 4 / 0
Регистрация: 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
647 / 482 / 120
Регистрация: 07.10.2013
Сообщений: 1,128
19.10.2015, 09:33 10
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
У меня получается 7
Да, и, к тому же, стабильная версия. У кого нет специфики, типа использование, как встроенной системы, то можно смело переходить на 7.2.3. Единственное, что надо отслеживать, 32 bits или 64 bits, если распространять... что собственно и для 6.x.x так же.
0
4 / 4 / 0
Регистрация: 13.05.2013
Сообщений: 114
19.10.2015, 17:40  [ТС] 11
под встроенной Вы имеете ввиду использование в приложениях на pyton/C++...?
0
647 / 482 / 120
Регистрация: 07.10.2013
Сообщений: 1,128
19.10.2015, 17:44 12
Цитата Сообщение от Alexey_Scherbak Посмотреть сообщение
под встроенной Вы имеете ввиду использование в приложениях на pyton/C++
Да, хотя и в этом случае вряд ли будут проблемы с 7.2.3. Все ведь, как обычно, и хотел бы на новую версию, а нельзя, если промышленная эксплуатация нормально работает и на 6.6.6
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2015, 17:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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