|
0 / 0 / 0
Регистрация: 01.01.2014
Сообщений: 54
|
||||||
Поясните код17.12.2014, 08:25. Показов 1537. Ответов 17
Метки нет (Все метки)
Приветствую вас форумчане, недавно начала работать с хаскелем имеются две следующие функции если не сложно, то объясните построчно.
первым как я поняла идет удаление списка, непонятно что означает именно вот эта запись [] _, дальше вроде бы понятно, что если голова то удаляем голову если хвост удаляем хвост. Ну и с заменой тоже вроде бы аналогично непонятно [] _ _ = []
0
|
||||||
| 17.12.2014, 08:25 | |
|
Ответы с готовыми решениями:
17
Поясните код
Поясните код |
|
Диванный эксперт
|
||||||
| 17.12.2014, 09:27 | ||||||
|
_ обычно обозначают игнорируемые параметры
1
|
||||||
|
Супер-модератор
|
|||
| 17.12.2014, 10:46 | |||
|
Тело функции состоит из образцов, которые применяются последовательно. Образец вида "delete [] _ = []" означает, "удаление любого (_) элемента из пустого списка дает пустой список". Этот образец служит терминальной ветвью рекурсии.
1
|
|||
|
Модератор
|
||
| 17.12.2014, 15:38 | ||
|
0
|
||
|
Модератор
|
|||
| 17.12.2014, 16:28 | |||
|
0
|
|||
|
Модератор
|
||
| 17.12.2014, 16:51 | ||
|
И всё предложение неверно по другой причине - "Образец ... удаление ... дает пустой список". Образец ничего не удаляет и не даёт пустой список. Представте себе человека ничего не знающего про образцы. Как он после этого поймёт как они работают.
0
|
||
|
Супер-модератор
|
|||||||
| 17.12.2014, 17:17 | |||||||
|
Cra3y писал "удаляет из списка символ c... -- для пустого списка возвращается пустой список, 2й аргумент функции игнорируется" Я писал ""delete [] _ = []" означает, "удаление любого (_) элемента из пустого списка дает пустой список" В чем разница (причем, как я вижу, принципиальная) - я не понимаю. Это не страшно (не всем же быть понятливыми!), но хочется разобраться... Под рукой оказалась книга Макеева Г.А. "Основы функционального программирования на языке Haskell". Вот объяснение из этой книги:
... Функция от пустого дает пустой ... Макеев ... Удаление из пустого ... дает пустой ... Ваш покорный слуга. Хоть убей, не ощущаю разницы.
0
|
|||||||
|
Модератор
|
|||
| 17.12.2014, 17:36 | |||
|
1) delete [] _ = []- не образец, образец только [] _ и он ничего не удаляет (и в выражении в целом ничего не удаляется). 2) Из фрагмента фразы "удаление любого (_) элемента из пустого списка" следует что (_) - это обозначение любого элемента списка, когда, на самом деле, это обозначение любого второго аргумента функции, который не список.
0
|
|||
|
Супер-модератор
|
||
| 17.12.2014, 18:18 | ||
|
Спасибо, все ясно.
Добавлено через 1 минуту Добавлено через 7 минут Кстати, в Вашем первом замечании Вы сами написали "Этот образец означает что передано", другими словами, молчаливо согласились, что это - образец. Ситуация для разговорного языка вполне заурядная. Я и сам люблю точные формулировки. Но сугубая точность нужна там, где неточность "дорого стоит". Здесь же случай явно не тот.
0
|
||
|
Супер-модератор
|
||
| 17.12.2014, 21:26 | ||
А цена вопроса в этом контексте не может быть дорогой. Ну, хорошо... Образцом является не весь "клоз", а только "[] _". Если я буду считать образцом "delete [] _", что-либо фатально изменится? Нет. Поэтому и в литературе зачастую образцом называют "delete [] _". Это было бы важно, если бы создавался парсер Haskell-кода, а так...
0
|
||
|
Модератор
|
||
| 17.12.2014, 21:44 | ||
|
Вряд ли в какой то литературе в образец включают и имя функции и знак равенства с выражением - это ошибка. "delete [] _ = []" означает, "удаление любого (_) элемента из пустого списка - ошибка, т.к. подразумевает что что (_) - это любой элемент списка, а в данном случае, не так. Сама фраза "удаление любого элемента из пустого списка" не имеет смысла. Вся строка кода о которой идёт речь ничего не удаляет а служит для завершения итерации - вот где ошибка. p.s: а если я где допускаю ошибки в тексте, то только рад если мне на них указывают.
0
|
||
|
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
|
||||||
| 15.01.2015, 17:26 | ||||||
|
а как удаляется голова списка?
--А если не совпадает, то присоединяем голову к результату удаления заданного символа из хвоста это если код на русский язык переводить, но что происходит если у нас удаляется голова списка на ее место приходит следующий элемент списка допустим список abdef голова a хвост bdef, что дальше происходит если смотреть по коду
0
|
||||||
|
Супер-модератор
|
|
| 15.01.2015, 17:53 | |
|
Голова списка - s. Если s==c, происходит рекурсивный вызов delete sx c. Голова проигнорирована (и не попадет в результат). Имейте в виду, что функции ничего не меняют в исходных данных, а создают результат
1
|
|
|
1 / 1 / 3
Регистрация: 25.03.2013
Сообщений: 119
|
||||||
| 16.01.2015, 04:44 | ||||||
|
а потом к результату она добавляется вот тут?
то етсь у строки abdef a вначале игноиррует а потом добавляется к хвосту, что тогда становится головой? Добавлено через 10 часов 41 минуту разобрался
0
|
||||||
| 16.01.2015, 04:44 | |
|
Помогаю со студенческими работами здесь
18
Поясните код Поясните код
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|