Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
1

Добавление в список элементов

21.07.2017, 19:37. Просмотров 1920. Ответов 18
Метки нет (Все метки)

Haskell
1
2
3
4
a = []
1 : 2 : a
-- Выведет [1, 2]
-- Но если введу a, то покажет [].
Я попробовал так:
Haskell
1
2
3
a = []
a = 1 : 2 : a
-- При вводе a интерпретатор начинал бесконечно печатать 1,2.
В чем проблема?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2017, 19:37
Ответы с готовыми решениями:

Получить список списков и вернуть список из N-х элементов подсписков
Доброго времени суток! пожалуйста помогите с функциональным программированием! ^_^ Условие...

Функция формирует список, содержащий суммы элементов первых i элементов исходного списка
Здравствуйте! Так вышло, что в сжатые сроки нужны решения некоторых задач. Решал бы сам, если бы не...

Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением)
Здравствуйте! Помогите написать программу, обеспечивающую работу с двунаправленным нециклическим...

Добавление элементов в список
Добрый вечер господа, вобщем написал я тут список, вот такой: #include <vcl.h> #pragma hdrstop...

Добавление элементов в список
Здравствуйте. Помогите пожалуйста решить проблему. У меня допустим есть список. Но как в него...

18
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
21.07.2017, 19:57 2
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
В чем проблема?
в список добавить элементы нельзя
0
Tklwegsd
Эксперт 1С
800 / 574 / 199
Регистрация: 24.07.2013
Сообщений: 2,001
21.07.2017, 20:07 3
Volobuev Ilya,
"=" - это не оператор присваивания.
1
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
21.07.2017, 20:24  [ТС] 4
в список добавить элементы нельзя
Хм, в одной книге говорилось что с помощью: добавляются элементы в список.
0
21.07.2017, 20:24
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
21.07.2017, 21:05 5
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
в одной книге говорилось что с помощью: добавляются элементы в список
там глупость написана. выброси эту книгу
0
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
21.07.2017, 21:13 6
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
в одной книге говорилось что с помощью: добавляются элементы в список.
Что это за книга? Там не говорилось что списки, как и другие значения в Haskell, неизменны, а результат будет новым значением которому можно, к примеру, присвоить новое имя
Haskell
1
b = 1 : 2 : a
А
Haskell
1
a = 1 : 2 : a
это такой список, у которого в начале 1,2, а потом этот же самый список. Получается определение бесконечного списка, что вам интерпретатор и печатал.

Добавлено через 2 минуты
Цитата Сообщение от pycture Посмотреть сообщение
там глупость написана. выброси эту книгу
Думаю, что в книжке написано правильно. Это ТС не так понял.
0
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
21.07.2017, 21:24 7
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Думаю, что в книжке написано правильно. Это ТС не так понял.
если книжка, правильно написанная, неправильно воспринимается на базовых вещах, то дальше будет хуже. выбрасывать по любому
0
Curry
21.07.2017, 21:27
  #8

Не по теме:

Цитата Сообщение от pycture Посмотреть сообщение
если книжка, правильно написанная, неправильно воспринимается на базовых вещах, то дальше будет хуже. выбрасывать по любому
Не судите заранее. Может быть узнаем что за книжка, тогда и оценим.

0
_Ivana
4236 / 1947 / 248
Регистрация: 01.03.2013
Сообщений: 5,262
Записей в блоге: 22
21.07.2017, 21:54 9
Не знаю у кого там что печатает (проверять лень), но я бы на месте интерпретатора вывалил ошибку о дублировании определения и вообще не стал бы ничего делать, как настоящий ленивый редуктор
1
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
22.07.2017, 07:48  [ТС] 10
Книжка Александро Меня Изучаем Haskell страница 33.

Добавлено через 48 минут
Точнее, вот: Алехандро Серано Мена.
2
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
22.07.2017, 09:57 11
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Алехандро Серано Мена
У меня нет этой книжки на русском. Хм. Просмотрел английский вариант. Там написано The basic operations to
construct lists are [] (pronounced “nil”) to create an empty list, and ( : ) (pronounced “cons”) to append an element
to an already existing list, that is, elt:lst is the list resulting of putting the value elt in front of the list lst.
И до этого не объясняется что такое = в Haskell, это дальше, т.е. вы с экспериментами с = вперёд забежали.
Выбрасывать всё равно не надо, книжка хорошая, там дальше много интересного, но я её читал когда уже знал Haskell, по крайней мере то что тут обсуждается. (Утверждать что я знаю Haskell полностью я и сейчас не возьмусь.)
2
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
22.07.2017, 16:15 12
скачал. прочел.
Основными операциями для создания списков являются [] для создания пустого списка и : для добавления элементов в уже существующий список
стер

Добавлено через 3 минуты
в оригинале кстати не лучше
The basic operations to
construct lists are [] (pronounced “nil”) to create an empty list, and ( : ) (pronounced “cons”) to append an element
to an already existing list, that is, elt:lst is the list resulting of putting the value elt in front of the list lst.
to append an element to an already existing list
0
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
22.07.2017, 17:32 13
pycture, у Липовача "если вы добавите что-нибудь в начало списка с помощью
оператора : (также называемого «cons»)". Тоже выкинуть?
1
Catstail
Модератор
25156 / 12833 / 2370
Регистрация: 12.02.2012
Сообщений: 20,916
22.07.2017, 18:15 14
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
В чем проблема?
Проблема в том, что написав

Haskell
1
a = 1 : 2 : a
вы сделали совсем не то, что подумали. В действительности вы... определили рекурсивную функцию, которая возвращает бесконечный список [1,2,1,2...]. И этим бесконечным списком нужно правильно пользоваться:

Haskell
1
2
3
4
Prelude> let a = []
Prelude> let a = 1:2:a
Prelude> take 20 a
[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
0
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
22.07.2017, 18:51 15
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
у Липовача "если вы добавите что-нибудь в начало списка с помощью
оператора : (также называемого «cons»)". Тоже выкинуть?
если там присутствует подобная ересь - однозначно. все так любят ругать современные школьные учебники, но при этом снисходительно относятся к тематической литературе. вам не кажется, что это в корне неправильно?
0
Curry
3116 / 2131 / 261
Регистрация: 01.06.2013
Сообщений: 4,598
Записей в блоге: 9
22.07.2017, 19:17 16
Цитата Сообщение от pycture Посмотреть сообщение
вам не кажется, что это в корне неправильно?
Вообще то мне это не понравилось. Авторы, правда, объясняют "В функциональной программе нельзя присвоить переменной сначала одно значение, а затем какое-то другое.", но делают это отдельно. Да, начинающего, привыкшего к процедурному языку, это может путать.

Но кого ему читать? Душкина? Ни в коем случае. Тот всё время приводит сравнения Haskell c Лиспом не в пользу первого. Кто ж так учебники пишет !?

Холомьёв тяжеловато начинает:
Haskell
1
data [a] = [] | a : [a]
Это определение списка. Как мы уже поняли, a – это параметр. Список [a] может быть либо пустым
списком [], либо комбинацией a : [a]. В этой комбинации знак : объединяет элемент типа a и ещё один
список [a]. Это рекурсивное определение, они встречаются в Haskell очень часто. Если это пока кажется
непонятным, не пугайтесь, в следующих главах будет представлено много примеров с пояснениями.
У Шевченко Стандартный оператор : добавляет значение, являющееся левым операндом, в начало списка, являющегося правым операндом.
0
Case-Man
167 / 107 / 22
Регистрация: 02.01.2012
Сообщений: 596
23.07.2017, 01:18 17
Да ладно вам всем.. Проблема именно в формулировках.
Есть понятия, которые очень сложно сформулировать словами, да ещё и с первого раза.
Не зря у классика было сказано "Мысль изречённая есть ложь"

Рецепт только один - брать несколько книг, сравнивать написанное, а потом проверять на примерах.
На тяжелых местах - по кругу несколько раз
0
pycture
1183 / 575 / 86
Регистрация: 20.09.2012
Сообщений: 1,860
Завершенные тесты: 3
23.07.2017, 08:16 18
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Но кого ему читать?
полагаю, что начинать изучение фп прям с хаскеля есть неверный путь. это все равно что учить процедурное программирование начиная с с++. должны существовать какието базовые методики не привязанные к конкретным языкам
Цитата Сообщение от Case-Man Посмотреть сообщение
Есть понятия, которые очень сложно сформулировать словами, да ещё и с первого раза.
если у книжных писак проблемы с простейшими формулировками типа списков, то они занимаются не своим делом (и денег, кто продает свои каракули, явно не заслуживают).
0
Соколиный глаз
C#
280 / 220 / 123
Регистрация: 25.07.2014
Сообщений: 4,181
Записей в блоге: 6
Завершенные тесты: 4
23.07.2017, 09:49  [ТС] 19
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Холомьёв тяжеловато начинает
Я его пробовал начать читать, но потерял интерес быстро при его стиле изложения. Напоминает какую-то справку, а не учебник для начинающих, как по мне.

Добавлено через 2 минуты
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Стандартный оператор : добавляет значение, являющееся левым операндом, в начало списка, являющегося правым операндом.
Ну, мне кажется все таки понять можно. Спасибо за ссылочку.
0
23.07.2017, 09:49
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2017, 09:49

Добавление в элементов в список
Всем привет. Не могу в чем проблема. #include <iostream> #include <string> using namespace...

Добавление элементов в список
Добрый день! Неожиданно проблема возникла. При использовании списков использовал раньше что-то типа...

Добавление элементов в список
привет. я только начала разбираться со списками. вот написала программу по добавлению элементов....


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

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

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