1 | ||||||||||||||||
Clojure Реализация ф-ций CONS, CAR, CDR (Sheme,CLisp)05.11.2016, 12:16. Показов 5343. Ответов 47
Метки нет (Все метки)
В книге SICP описан алгоритм реализации функций CONS,CAR,CDR на языке Sheme
Что-то типа этого
0
|
05.11.2016, 12:16 | |
Ответы с готовыми решениями:
47
Композицией базовых функций CAR, CDR, CONS, LIST Lisp. По какому принципу работают функции CAR,CDR,CONS? Работа со списками в LISP, используя базовые функции CAR, CDR, CONS Заменить каждый второй элемент списка на 0,используя только рекурсию, CAR, CDR, CONS,COND |
Модератор
|
|
05.11.2016, 17:04 | 2 |
Все это вызывает беспокойство... Cons - первичная (ядерная) функция. Вряд ли имеет смысл ее реализовывать. Да и код странный. Смысл cons в том, чтобы создать новую ячейку. Из приведенного кода этого не видно.
0
|
05.11.2016, 18:32 | 3 |
Спокойствие, только спокойствие! (С)
Эта реализация абстракции списка через замыкания меня в свое время тоже весьма впечатлила и вдохновила. И я долго и безуспешно пытался повторить ее на haskell - боролся с системой типов, никак не получалось реализовать как в оригинале, где динамическая типизация позволяет такое проделывать. Но зато я реализовал эту концепцию в следующих языках: 1) Ela - http://elalang.net/ - типа динамический haskell, очень удобно тем, кому статическая типизация больше мешает чем помогает Пример кода не сохранился, но там нетрудно повторить реализацию. 2) С++ - https://github.com/Ivana-/C-lambda-over-lambda - мой пример кота на гитхабе, в котором я через плюсовые лямбды (хранящие на стеке в виде замыканий свое содержимое) реализую абстракцию подобных списков, функции их трансформации (map / filter / fold и т.п.) и с помощью этих абстракций накостылил несколько типичных примеров алгоритмов на списках - числа Хэмминга и т.п. 3) Haskell - в конечном итоге удалось продраться через прокрустово ложе жесткой системы типов, но не без потерь - реализация выглядела не элегантно. ЗЫ в общем, рекомендую ТС продолжать свои опыты. Конечно реализация через глобальные переменные имхо обречена на провал - вам нужна возможность создавать сколько угодно списков любой длины. Но сама забава в высшей степени интересна, как концепция и разминка для мозгов
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
05.11.2016, 20:33 | 4 |
Я не очень понял, каким боком тут глобальные переменные. Только замечу по мелочи, что числа нельзя сравнивать с помощью eq (это оговорено в стандарте), нужно использовать или eql, или =, и что переопределять функцию cl:cons нельзя: стандарт запрещает переопределять функции из пакета "CL", и ваш компилятор/интерпретатор должен ругаться. Также, язык называется Common Lisp, сокращается CL, а clisp - название одного из интерпретаторов.
Добавлено через 1 минуту Кстати, в данном случае можно было пользоваться case.
0
|
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
|
||||||
05.11.2016, 20:35 | 5 | |||||
dserp18, а Ваш код вот так может?
0
|
05.11.2016, 21:42 | 6 | |||||
rdt, я конечно не ТС, но если дать немного ума его коту, и убрать лишние символы и скобки, то вполне все получается:
2
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
||||||
06.11.2016, 21:25 | 7 | |||||
Или обойтись только лямбдами. =)
Кликните здесь для просмотра всего текста
0
|
07.11.2016, 22:28 [ТС] | 10 | ||||||||||
подскажите,будьте любезны, а что это за код?
0
|
07.11.2016, 23:09 | 11 | |||||
Это кот на самодельном диалекте под названием Лискрипт. Если вас смущает головная форма defn, то ее можно хоть горшком назвать. У меня она определена в стандартной библиотеке определена так:
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
10.11.2016, 01:26 | 12 |
меня например смущает отсутствие скобок... с точки зрения лиспа это такая функция, которая возвращает функцию, которая возвращает строку
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
10.11.2016, 02:27 | 14 |
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
11.11.2016, 19:30 | 16 |
не выдумывайте, у вас белиберда получилась и вообще не понятно что... скобки, неважно какие, круглые ли, фигурные ли или вообще из ключевых слов - обязательный атрибут сложных выражений. в лиспе такой код неизменно завершится ошибкой, потому что функция m не определена
0
|
11.11.2016, 19:34 | 17 |
Однако, мой интерпретатор (да и внутренний парсер в голове тоже ) не согласны с такими вашими оценками и вполне однозначно выполняют написанный кот И никаких лишних скобок не требуется.
ЗЫ если кому из менее эмоциональных участников одновременно интересно и непонятно - могу пояснить подробно как это парсится и трактуется.
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
||||||
11.11.2016, 20:14 | 18 | |||||
ваш код звучит как шариков в первые часы жизни и с точки лиспа выглядит вот так
0
|
11.11.2016, 20:25 [ТС] | 20 |
Ну, наверное, можно сделать такую реализацию Лиспа с отступами как в Python. Это уже кому что больше нравится.
0
|
11.11.2016, 20:25 | |
11.11.2016, 20:25 | |
Помогаю со студенческими работами здесь
20
каждый нечетный элемент списка умножить на 2, каждый четный на 3. использовать только рекурсию CAR,CDR,COND,CONS car и cdr Car и Cdr Композиция CAR и CDR Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |