Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ рекурсия и ассоциативные списки

Автор: Jerry 2.10.2008 23:03

задание таково, что надо из списка ((d t b u)(t b u)(d b u)(b u)(d t u)(t u)(d u)(u)(d t b)(t b)(d b)(b)(d t)(t)(d)) сформировать список пар (ассоциативный список), с неповторяющимися значениями в этих парах.

я думаю, что надо использовать функцию pairlis и

Код
  (defun add (x y al)
(cond ((null al) nil)
(t (acons x y (car al)
(add (cdr al))))))
(add b u al)


как-то так, но как всязать все эти функции пока не знаю... может кто поможет? !mol1.gif

Автор: мисс_граффити 6.10.2008 23:27

Можно подробнее - что такое ассоциативный список? т.е. что должно получиться на выходе, скажем, из этого списка?

Автор: Jerry 9.10.2008 3:00

Цитата(мисс_граффити @ 6.10.2008 19:27) *

Можно подробнее - что такое ассоциативный список? т.е. что должно получиться на выходе, скажем, из этого списка?


ассоциативный - это список пар типа ((ф а)(в п)(в р)...)
я в принципе нашла как можно сделать первую часть задания:
1) свернуть данный список в одноуровневый, тоесть без скобок
Код
(defun pr (l)
(cond ((null l) nil)
((atom l)(cons (car l) nil))
(t (append (pr (car l))(pr (cdr l))))))

2) с помощью функции pairlis создать список пар
а вот как удалить повторные пары элементов (да и может необязательно пары... чтобы хоть что-то было) из полученого списка не знаю ((

Автор: мисс_граффити 9.10.2008 3:48

как из ((d t b u)(t b u)(d b u)(b u)(d t u)(t u)(d u)(u)(d t b)(t b)(d b)(b)(d t)(t)(d)) получилось ((ф а)(в п)(в р)...) ?!!!
Нифига не понимаю.

Как сделать, чтобы не было повторных - могу рассказать. Но пока вообще не понимаю, нужно ли это.

Автор: Jerry 9.10.2008 15:56

Цитата(мисс_граффити @ 8.10.2008 23:48) *

Как сделать, чтобы не было повторных - могу рассказать. Но пока вообще не понимаю, нужно ли это.


((d t)(b u)(t b)(u b)(b u)...) - такой список выходит. теперь в нем надо избавится от повторных пар.


Автор: мисс_граффити 9.10.2008 18:28

избавляйся "на лету".
то есть если такая пара уже есть, то ее добавлять не надо.

сравниваешь пару, которую планируешь добавить, с первой парой списка, и применяешь эту же функцию к остатку.

Автор: Jerry 9.10.2008 20:06

спасибо