![]() |
|
|
![]()
|
|
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
Привет.. может кто знает как сделать.
дан список сколь угодно вложенности (q,w,(e,r),(t,y,(u,i),o).. (p)) ноадо сделать из этого списка один простой (q,w,e,r,t,y,u,i,o,p) заранее спасибо --------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
на худой конец можно просто постараться обмануть препода(не сильно шарящего в программухе) путем просто удаления из строки всех символов "(" и ")"...
кто нить это знает как сделать? --------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
ну зачем же так жутко?
Пролога не помню, но всплывает что-то типа этого: Joiner ( [ [A|B] | T] , X) <- Joiner( [ A | [B|T] ] , X) Joiner ( [A | [B|T] ] , X) <- Joiner( [B|T], [A|X]) первое высказывание работает для тех случаев, когда первый элемент - список, в этом случае оно просто перегоняет хвост первого элемента в голову второго, а первый делает единственным (если он в свою очередь не был списком) второй - в остальных - просто "прикрепляет" первый элемент к результату (правда, после всего этого надо его ещё будет развернуть)... Добавлено @ 18:33 упс, напутал: Joiner ( [A | [B|T] ] , [A|X] ) <- Joiner( [B|T],X) ну и Joiner ([],[]) -------------------- qqq |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
у нас присоединяемый элемент либо список, либо не-список.
если не список - просто бросаем его в голову результата. если список - рекурсивно вызываем тот же предикат для головы списка и для хвоста. после всего, как верно заметил maxim1000, список разворачиваем. Ибо бросать элементы можем только в голову. Вечером попаду домой к интерпретатору - набросаю программу |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
можно даже попробовать избавиться от необходимости разворота так:
Joiner ( [ [A|B] | T], X) <- Joiner ( [A | [B|T] ], X) Joiner ( [A | B] , [A | X] ) <- Joiner (B,X) хотя не уверен, с Прологом после университета не сталкивался... -------------------- qqq |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 2 Всего: 78 |
В такой ситуации первый подсписок вовсе не список, так как стоит знак |. Поэтому прохождение по списку результата не даст. На этот вопрос пока ответить не могу. Завтра у препода спрошу, и всё здесь распишу. -------------------- Ll 2 |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 6 Всего: 50 |
Из Братко:
Добавлено @ 02:15 Если я не ошибаюсь, в Прологе с большой буквы только переменные... Это сообщение отредактировал(а) Artemios - 21.11.2006, 10:55 -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
ой всем спасибо за советы..
а может кто код накидать? --------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| Artemios |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 6 Всего: 50 |
Если возьмешь мой пример, сохранишь в файл, например linlist.pl, а потом запустишь swi-prolog, то на приглашение интерпретатора ?- вводи следующее:
где 'путь к файлу linlist.pl' -- путь к файлу linlist.pl тебе выдаст следующее:
Добавлено @ 15:56 P.S. Иные интерпретаторы могут непонимать русских букв, тогда назовешь все латинскими. Добавлено @ 16:01 P.P.S Только не используй Turbo или Visual Prolog -- это издевательство над языком программирования! -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
||||
|
|||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
а что на турбо прологе по другому будет? у нас там стоит именно он и без прав никакой сви- или даже вижуал пролог я не поставлю..
--------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 2 Всего: 78 |
Просто на Турбо Прологе не используй русских букв. А всё называй английскими буквами. И всё будет нормально -------------------- Ll 2 |
|||
|
||||
| Artemios |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 6 Всего: 50 |
И только? Просто я отрицательно отношусь к этим прологам потому, разработчики слишком далеко отошли от т.н. "чистого" пролога, даже обидно, что оставили название "Пролог". На Турбо тебе нужно будет еще продумать типизацию своего сложносоставного списка (см. соседнюю ветку), а также заранее описать все используемые предикаты... -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
ну, предикаты не проблема - алгоритм-то есть. А вот с доменами(типом), как я понял, полный ноль _Dream, пущай хитрый преподаватель расскажет тебе, как описать domains для списка integer неограниченного уровня вложенности |
|||
|
||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
"хитрый преподователь" полный 0 в прологе потому я предлагал даже на хитрость пойти.. он не поможет. а спрашивать будет.. у нас чего-то решили сделать по этому предмету зачет, а если задачу решаешь то автомат
PS для меня все эти предикаты.. темный лес =) PPS да я понимаю это нагло на турбо прологе. не обязательно теоритически-бесконечные списки(если в этом сложность) буду премного благодарен PPPS поставил бы пиво но вы все из других городов я уверен =) Это сообщение отредактировал(а) _Dream - 25.11.2006, 17:46 --------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| brianosally |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 22.12.2010 Репутация: нет Всего: нет |
%линеаризация(уничтожение многоуровневости списка к пр. [a,[b,[c]]] --> [a,b,c]) lineariz([H|L],L1):-lineariz(H,LS),lineariz(L,LS2),union_lists(LS,LS2, L1). lineariz([],[]). lineariz(H,[H]). [a,[b,[c]]] --> [a,b,c] [a,[b,[c]]] --> [a,b,c,[]] [a,[b,[c]]] --> [a,b,c,[],[]] [a,[b,[c]]] --> [a,b,c[],[],[]] ........................................... [a,[b,[c]]] --> [a,b,[c]] и т. д. Но если добавить ! в выражение, то обратный ход отсечется, как и куча лишних вариантов: %линеаризация(уничтожение многоуровневости списка к пр. [a,[b,[c]]] --> [a,b,c]) lineariz([H|L],L1):-lineariz(H,LS),lineariz(L,LS2),!,union_lists(LS,LS 2,L1). lineariz([],[]). lineariz(H,[H]). результат : [a,[b,[c]]] --> [a,b,c] %второй вариант у меня так и не заработал, но может кто усовершенствует: %lineariz([[H|L]|H1],L2):-lineariz([H|[L|H1]],L2). %lineariz([H|[L|H1],[H|L2]):-lineariz([L|H1],[H|L2]). |
||||
|
|||||
![]()
|
| Правила форума Prolog | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Prolog | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |