Форум программистов, компьютерный форум, киберфорум
Erlang, OTP
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
1

Сформировать список, состоящий из элементов, которые встречаются в обоих исходных списках

19.11.2014, 18:10. Показов 3596. Ответов 24

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

>(name ‘(a s d f g h ) ‘(q a w s e d r))
(a s d)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 18:10
Ответы с готовыми решениями:

Объединить два исходных списка, за исключением элементов, встречающихся в обоих списках
Формировать список, являющийся объединением двух исходных списков, за исключением элементов,...

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

Сформировать массив из элементов, которые присутствуют в обоих исходных массивах
Даны два массива. Сформировать третий массив, состоящий из тех элементов, которые: присутствуют в...

Сформировать третий массив, состоящий из тех элементов, которые присутствуют в двух исходных
Задача: Даны два массива. Сформировать третий массив, состоящий из тех элементов, которые...

24
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
19.11.2014, 19:45 2
rockstarone, модуль lists использовать можно?
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
19.11.2014, 21:37  [ТС] 3
думаю да.

Добавлено через 20 минут
S_el, да
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
19.11.2014, 22:13 4
rockstarone, тогда советую использовать функцию:
dropwhile(Pred, List1) -> List2
в качестве предиката функцию нахождения элемента в другом списке.
member(Elem, List) -> boolean()

Документация по модулю:
http://www.erlang.org/doc/man/lists.html
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
19.11.2014, 22:23  [ТС] 5
S_el, честно говоря . я не очень разбираюсь в эрлаг\нге мне б конкретно пример . и желательно без встроенных функций
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
19.11.2014, 22:41 6
Цитата Сообщение от rockstarone Посмотреть сообщение
честно говоря . я не очень разбираюсь в эрлаг\нге мне б конкретно пример . и желательно без встроенных функций
я и сам новичок в Erlang,можно написать и без использования встроенных функций.
Давайте проверять на совпадение все элементы из двух списков.
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
22.11.2014, 17:20 7
rockstarone, все оказалось намного проще:

Код
 A=[a, s, d, f, g, h].
 B=[q, a, w, s, e, d, r].
C=A--(A--B).
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
22.11.2014, 23:10  [ТС] 8
S_el, только мне функция нужна
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
22.11.2014, 23:58 9
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

Цитата Сообщение от rockstarone Посмотреть сообщение
только мне функция нужна
А может вы сами попробуете сделать задачу?

Добавлено через 40 минут
Цитата Сообщение от rockstarone Посмотреть сообщение
только мне функция нужна
Функция так функция:

Код
New = fun E(_,[],_)->[];
E([],[_|T],Old)->E(Old,T,Old);
E([H|T],[Y|Ty],Old) when H=:=Y->[H|E(Old,Ty,Old)]; 
E([_|T],Y,Old)-> E(T,Y,Old) end.
вызов:
Код
A=[a, s, d, f, g, h].
B=[q, a, w, s, e, d, r].
F1=New(B,A,B).
1
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 00:17  [ТС] 10
S_el, да я попробовал .
Код
-module(lab6).
-export([minus/2]).
minus([],[])->[];
minus(L,H)when hd(L)=hd(H)->[hd(L)]++minus(tl(L),tl(H));
minus(L,H)->minus(tl(L),tl(H)).
Добавлено через 25 секунд
S_el, непойму как вызвать . не хочет работать у меня
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
23.11.2014, 00:35 11
Цитата Сообщение от rockstarone Посмотреть сообщение
непойму как вызвать . не хочет работать у меня
Откройте оболочку и скопируйте туда вначале первый код,затем протестируйте на втором.
Не хочет работать,значит какую-то ошибку пишет?

Добавлено через 2 минуты
Цитата Сообщение от rockstarone Посмотреть сообщение
Код
hd(L)
hd/1 - это встроенная функция,а у вас по условию:
Цитата Сообщение от rockstarone Посмотреть сообщение
желательно без встроенных функций
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 10:36  [ТС] 12
S_el, hd tl можно использовать. да выдает ошибку . я загружаю через файл эту функцию. пишу c(lab5).
У меня ошибка no such file or directory error

Добавлено через 4 минуты
S_el, проблема и состоит в том , что я не знаю как вызвать эту функцию и протестировать ее на 2 списках которые даны мне
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
23.11.2014, 10:40 13
Цитата Сообщение от rockstarone Посмотреть сообщение
пишу c(lab5).
У меня ошибка no such file or directory error
Все правильно,вы пытаетесь компилировать lab5 а модуль назван lab6

Цитата Сообщение от rockstarone Посмотреть сообщение
проблема и состоит в том , что я не знаю как вызвать эту функцию и протестировать ее на 2 списках которые даны мне
Какую функцию вы хотите протестировать?
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 10:42  [ТС] 14
S_el, minus

Добавлено через 1 минуту
S_el, я и lab6 писал все равно ошибка
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
23.11.2014, 11:48 15
Цитата Сообщение от rockstarone Посмотреть сообщение
я и lab6 писал все равно ошибка
Запустите оболочку и выполните команду
Код
pwd().
она отобразит текущую директорию,именно в ней надо создать ваш модуль.
Если такой вариант вас не устраивает,текущую директорию можно сменить командой:
Код
cd("путь к директории").
Добавлено через 12 минут
Теперь разберем ваше решение,при попытке компиляции оболочка выдаст сообщение об ошибке:
Код
lab6.erl:4: illegal guard expression
это значит,что ваше охранное выражение(guard) ошибочно.И ошибка допущена в 4 строке,смотрим на 4 строку:
Код
minus(L,H)when hd(L)=hd(H)->[hd(L)]++minus(tl(L),tl(H));
Вспоминаем теорию:
перед охранным выражением стоит ключевое слово when.
значит наш guard имеет вид:
Код
hd(L)=hd(H)
вспоминаем ,что в Erlang оператор =,это не присваивание и не сравнение,а и то и другое
сопоставление с образцом.Использовать в данном случае его не корректно,поэтому заменим,на оператор сравнения " в точности равно":
Код
=:=
после замены компиляция пройдет успешно.
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 13:25  [ТС] 16
S_el, вы мне объясните.Я положил файл в директорию куда показал
pwd(). затем вызвал в оболочке c(lab6). выдало ошибку.
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
23.11.2014, 13:29 17
rockstarone, так мы далеко не уедем.
Я вам дал совет по решению с помощью модуля lists - вам не подошло.
Решил с помощью списочного оператора -- - вам не подошло
Написал за вас функцию и привел пример - вам не подошло
Дал совет,как исправить ошибку вашего модуля - вам не подошло.
Как мне вам объяснить,если вы не говорите какие действия к каким ошибкам привели?
1
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 13:42  [ТС] 18
S_el, Спасибо огромное. но меня просто интересует как мне запустить мой модуль и проверить на 2 списках. работает он или нет.

Добавлено через 4 минуты
S_el, вот . он загрузил наконец его

Добавлено через 20 секунд
S_el,
0
2404 / 1807 / 397
Регистрация: 15.12.2013
Сообщений: 7,779
23.11.2014, 13:43 19
rockstarone, сделайте как я предлагал в сообщении 15 начиная с команды cd.
Пример её вызова в Windows:
Код
cd("E:/temporary").
В итоге модуль должен скомпилироваться и функцию можно будет проверить.
0
13 / 13 / 9
Регистрация: 23.10.2014
Сообщений: 184
23.11.2014, 13:43  [ТС] 20
Код
2> lab4:minus([1,2,3,4],[2,3,4]).

=ERROR REPORT==== 23-Nov-2014::13:40:36 ===
Error in process <0.30.0> with exit value: {ba
,2},{shell,exprs,6},{shell,eval_loop,3}]}

** exited: {badarg,[{erlang,tl,[[]]},
                    {lab4,minus,2},
                    {shell,exprs,6},
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2014, 13:43

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

Создайте функцию, возвращающую ту цифру двух исходных чисел, которые встречаются в обоих числах
1. Создайте функцию, возвращающую ту цифру двух исходных чисел, которые встречаются в обоих числах.

Создать новый список, имеющий элементы, которые есть в обоих списках
По какой то причине не работает функция в списке. Задача такая: Дано два списка числами. Создать...

Вывод элементов, которые имеются в обоих списках
CL-USER 1 &gt; (defun inters (x y) (remove nil (mapcar #'(lambda (z) (if (member z y) z nil)) x)))...

Сформировать массив, состоящий из одинаковых элементов исходных массивов
Ввести два массива X и Y, состоящих из 10-ти элементов целого типа. Сформировать массив S,...


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

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

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