Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
1

О Лиспе и гомоиконности

17.02.2017, 17:04. Показов 2536. Ответов 58
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
CL -- это не единый консистентный язык, а среда разработки
Ясно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2017, 17:04
Ответы с готовыми решениями:

Реализация циклов на Лиспе, Вложенные циклы на Лиспе
1)реализовать двумя способами (LET, LOOP, DO, DOTIMES) первая картинка 2)Согласно варианту...

Рекурсия в лиспе
объясните пожалуйста зачем здесь T. Я понимаю практически до конца как работает код, но одного не...

Списки на Лиспе
даны списки L1,L2,L3. Если L1 является префиксом L2, а L3 - суффиксом L2, то ответ yes, иначе - no....

Структуры на Лиспе
Добрый ночи, форумчанин! Прошу помогите мне пожалуйста. Задача 4. На аптечном складе...

58
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
17.02.2017, 22:31 2
Цитата Сообщение от asmquest Посмотреть сообщение
в общем, суть в том, что макроязык ортогонален самому языку. CL -- это не единый консистентный язык, а среда разработки, где 2 языка в одном флаконе, которые взаимодействуют между собой определенным образом.
Не стоит вводить в заблуждение общественность. Всё с точностью до наоборот. Не важно, run time или compile time, язык один и тот же, нет никаких ограничений и отходов от правил. Единственное отличие в окружениях: естественно, что при macroexpand-е не доступно runtime окружение.
То что ты написал скорее относится к C++. Там действительно templates - язык в языке.
0
Заблокирован
17.02.2017, 22:41 3
nullxdth, ну да, лисп особенный, ведь это лисп, не плюсы какие нибудь там сраненькие. Даже если все работает также, все равно все по другому

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
все равно все по другому
ах ну да, в плюсах конечно нет евала, и jit-компиляции. Именно это в этом смысле и отличает. В лиспе можно подать на вход результат выполнения, и скомпилировать код в рантайме. Если бы этого не было, лисп по убогости бы мало чем от плюсов отличался

Добавлено через 3 минуты
nullxdth, кстати, плюсы -- это макро-си, он так и был впервые реализован, как препроцессор. А си -- макро-ассемблер Шаблоны можно назвать макроплюсами. Как все запущено
Ахренеть, это все называется "языками программирования"
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
17.02.2017, 22:59 4
Цитата Сообщение от asmquest Посмотреть сообщение
не плюсы какие нибудь там сраненькие
Это ты говоришь, не я. Я понимаю почему в C++ так, а не иначе.
Цитата Сообщение от asmquest Посмотреть сообщение
jit-компиляции
JIT-комиляции нет в известных мне реализациях CL. По крайней мере в классическом понимании этого термина.
Цитата Сообщение от asmquest Посмотреть сообщение
В лиспе можно подать на вход результат выполнения, и скомпилировать код в рантайме. Если бы этого не было, лисп по убогости бы мало чем от плюсов отличался
Эта функциональность действительно в CL имеется, но, в действительность, очень редко используется. Common Lisp и без этого хорош.
Более того, не будь в CL макросов, тоже было бы ничего - как Python, только лучше.

Добавлено через 6 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Даже если все работает также
Что работает также?
Твоё утверждение:
Цитата Сообщение от asmquest Посмотреть сообщение
CL -- это не единый консистентный язык, а среда разработки, где 2 языка в одном флаконе, которые взаимодействуют между собой определенным образом.
Не соответствует действительности. И легко проверяется.
0
Заблокирован
17.02.2017, 23:03 5
Цитата Сообщение от nullxdth Посмотреть сообщение
По крайней мере в классическом понимании этого термина.
Классическое понимание этого термина -- компиляция в рантайме, "на ходу" (just in time). Любой компилируемый язык с эвалом не может обойтись без этого
Цитата Сообщение от nullxdth Посмотреть сообщение
как Python
дык ведь пистон -- говно С понтом динамический язык в шкуре жабы

Добавлено через 2 минуты
Цитата Сообщение от nullxdth Посмотреть сообщение
Не соответствует действительности.
Соответствует. Язык препроцессора(ака макросы) можно встроить в любой язык. Разница тут именно в eval, он как бы объединяет в данном случае.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
17.02.2017, 23:54 6
Цитата Сообщение от asmquest Посмотреть сообщение
Соответствует.
Нет.
Цитата Сообщение от asmquest Посмотреть сообщение
Язык препроцессора(ака макросы) можно встроить в любой язык.
Что это значит? Как встроить?
Цитата Сообщение от asmquest Посмотреть сообщение
Разница тут именно в eval, он как бы объединяет в данном случае.
Причём тут eval? Факт - ты не понимаешь как устроен Common Lisp.

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Классическое понимание этого термина -- компиляция в рантайме, "на ходу" (just in time)
Обычно когда говорят про jit, имеют ввиду компиляцию байткода в машкод которая скрыта от пользователя языка и он на это никак влиять не может. Но в терминологический спор я встревать не намерен. Это безблагодатное занятие.
0
Заблокирован
17.02.2017, 23:55 7
Цитата Сообщение от nullxdth Посмотреть сообщение
Как встроить?
руками.
парсишь исходник, раскрываешь выражения, которые нужны, отдаешь раскрытый исходник исполнителю.
0
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 00:04 8
Цитата Сообщение от asmquest Посмотреть сообщение
руками.
парсишь исходник, раскрываешь выражения, которые нужны, отдаешь раскрытый исходник исполнителю.
Муторное и достаточно сложное занятие, особенно если синтаксис не простой. За это и любят Lisp, что s-expressions, гомоиконность - легко парсить, легко генерировать.

Добавлено через 4 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
В макроэкспанде просто преобразуется код макроса в код языка
Язык в теле макросе и язык результирующего кода один и тот же.
0
Заблокирован
18.02.2017, 02:03 9
Цитата Сообщение от nullxdth Посмотреть сообщение
гомоиконность
Вот сказать по честному, я не понимаю, что такое гомоиконность. Читаю в википедии, какие то мантры, хз. Где та грань, вообще, которая отделяет гомоиконность от не-гомоиконности, и что это дает?
Вот цитата из википедии:
гомоиконичность — это когда исходный код программы пишется как базовая структура данных и язык программирования знает, как получить к ней доступ.
Какой нахрен лисп может получить доступ к скомпилированной функции, например? Или лисп наполовину гомоиконный? Может, частично гомоиконный, или как?

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
пишется как базовая структура данных
и вот это, опять же, хрень какая то. Разве код любого языка не представим в виде строки? Строку нельзя рассматривать как структуру данных по-мнению лисперов, или что? Чем список принципиально отличается от строки? В чем тут эксклюзив лиспа?

Добавлено через 14 минут
nullxdth,
или вот:
Типичной демонстрацией гомоиконичности является метациркулярный вычислитель
Можете мне назвать язык, в котором невозможно написать его же(не считая падения перворманса)? И по каким причинам? Или это гонево?

Добавлено через 1 час 25 минут
Цитата Сообщение от nullxdth Посмотреть сообщение
легко парсить
да, а если под "легко парсить" понимается cdcdcdcdcdcdcdcr, то не, спасибо, я лучше по старинке, как-нибудь, регулярками, или перебором символов.
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.02.2017, 08:55 10
Цитата Сообщение от asmquest Посмотреть сообщение
В чем тут эксклюзив лиспа?
What Made Lisp Different
" 8. A notation for code using trees of symbols. 9. The whole language always available. There is no real distinction between read-time, compile-time, and runtime. You can compile or run code while reading, read or run code while compiling, and read or compile code at runtime. Running code at read-time lets users reprogram Lisp's syntax; running code at compile-time is the basis of macros; compiling at runtime is the basis of Lisp's use as an extension language in programs like Emacs; and reading at runtime enables programs to communicate using s-expressions, an idea recently reinvented as XML.
...
8, which (with 9) is what makes Lisp macros possible, is so far still unique to Lisp, perhaps because (a) it requires those parens, or something just as bad, and (b) if you add that final increment of power, you can no longer claim to have invented a new language, but only to have designed a new dialect of Lisp ; -) "

Добавлено через 2 минуты
Andrew Sorensen: Just For Fun
https://vimeo.com/2433971
0
Заблокирован
18.02.2017, 09:49 11
_sg, я спрашиваю конкретно про гомоиконность.

Добавлено через 4 минуты
_sg, кстати, по вашей ссылке про общелисп ни слова. Там что то про lisp 1.5 и arc

Добавлено через 34 минуты
_sg, и вот это туфта:
A symbol type. Symbols differ from strings in that you can test equality by comparing a pointer.
Не в любом языке строки можно сравнить по указателям, только там, где они являются примитивными типами. Очередной фанбой там песенки распевает, короче
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.02.2017, 10:22 12
asmquest, после 1994 г., если не уточняется, то Lisp - это, или в том числе - Common Lisp (стандарт ANSI X3.226-1994).

Добавлено через 4 минуты
про гомоиконность (там же):
"Лисп-программы записываются в виде списков; в результате получается, что программа может получить доступ к своим собственным функциям во время работы, а также перепрограммировать себя «на лету»."
https://ru.wikipedia.org/wiki/Гомоиконичность

https://en.wikipedia.org/wiki/Viaweb
https://en.wikipedia.org/wiki/... r_startups

Добавлено через 15 минут
Among the eight start-ups that graduated Y.C.’s first class, in the summer of 2005, were the social-news site Reddit, recently valued at $400 million; and Infogami, the Web-site builder created by the tech martyr Aaron Swartz, which merged with Reddit. Other Y.C. success stories include Dropbox (file-sharing service, $4 billion), Airbnb (online market for vacation rentals, $1.3 billion) and Stripe (Web-based credit-card-payment software, $500 million).
http://www.nytimes.com/2013/05... d=all&_r=0
1
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 10:53 13
Цитата Сообщение от asmquest Посмотреть сообщение
Вот сказать по честному, я не понимаю, что такое гомоиконность.
Создавай отдельную тему касательно этого вопроса - обсудим. Тут уже полный оффтоп.

Добавлено через 6 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Чем список принципиально отличается от строки?
Тем, что любой s-expression - синтаксически корректный Lisp код. А, скажем, текст "Войны и мира" Льва Николаевича - это не код на Си.

Добавлено через 9 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Какой нахрен лисп может получить доступ к скомпилированной функции, например?
Что значит получить доступ? Ты можешь вычислить функцию, можешь перекомпилировать её. Что ещё надо?
2
Заблокирован
18.02.2017, 19:31 14
Цитата Сообщение от nullxdth Посмотреть сообщение
Что ещё надо?
работать как со структурой разумеется, как оно следует из определения

Добавлено через 1 минуту
Цитата Сообщение от nullxdth Посмотреть сообщение
Тем, что любой s-expression - синтаксически корректный Lisp код. .
А, скажем, любое выражение си -- корректный код на си.

Добавлено через 2 минуты
Цитата Сообщение от _sg Посмотреть сообщение
в результате получается, что программа может получить доступ к своим собственным функциям во время работы, а также перепрограммировать себя «на лету»
это вранье, CL не имеет доступа к функциям во время работы. Io, кстати, имеет

Добавлено через 3 минуты
Цитата Сообщение от _sg Посмотреть сообщение
Viaweb
как только куплен, сразу же переписан на си.
Кстати, этот счастливый случай грехема связан с конъюктурой рынка, а вовсе не с тем, о чем он подумал. Это был период пузыря доткомов.

Добавлено через 11 минут
Цитата Сообщение от asmquest Посмотреть сообщение
как только куплен, сразу же переписан на си.
но там, кстати, не CL был, в любом случае
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.02.2017, 19:35 15
asmquest, если заменить программу на Andrew Sorensen:
https://vimeo.com/2433971
0
Заблокирован
18.02.2017, 19:44 16
_sg, по вашей ссылке, во-первых, не common lisp, а во-вторых, я не понял, к чему Вы клоните. Перекомпиляция функций в рантайме возможна во многих языках, включая JS, это не относится к вопросу.

Добавлено через 4 минуты
Цитата Сообщение от nullxdth Посмотреть сообщение
отдельную тему
тему отделили, так что все ок
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.02.2017, 20:27 17
asmquest, гомоиконность, или нет:
Lisp
1
2
3
4
5
6
7
(defun make-fun (name params body)
  (eval `(defun ,name ,params ,body)))
 
> (make-fun 'make-fun '(x y z) '(+ x y z))
MAKE-FUN
> (make-fun 2 3 4)
9
Добавлено через 4 минуты
Understanding Homoiconicity Through Clojure Macros
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
18.02.2017, 20:34 18
Цитата Сообщение от asmquest Посмотреть сообщение
наполовину гомоиконный
Сохраните код в переменную и будет Вам счастье. Не такие уж большие это будут накладные расходы.

Не нравится? Возьмите некомпилируему версию лиспа.

Цитата Сообщение от asmquest Посмотреть сообщение
Можете мне назвать язык, в котором невозможно написать
Легко, любой язык, не являющийся тьюринг-полным.

IMHO, сравнивать надо то, что язык позволяет сделать "из коробки" небольшим количеством кода. В этом смысле CL неплох, у него довольно богатая стандартная библиотека.

Цитата Сообщение от asmquest Посмотреть сообщение
cdcdcdcdcdcdcdcr
Такой длины заклинания плохо читаются, а это признак некачественного кода. Попробуйте функцию "nth". Или структуры. Или классы.

Цитата Сообщение от asmquest Посмотреть сообщение
регулярками
Можно загрузить библиотеку и пользоваться регулярными выражениями в программе на лиспе. Думаю, не так много языков, поддерживающих регулярные выражения "из коробки". Perl не предлагать, он нечитаемый.

Цитата Сообщение от asmquest Посмотреть сообщение
перебором символов
IMHO, лисп выглядит практически идеальным языком для написания простеньких парсеров. Я сравнивал код на лиспе и на delphi - лисповский код проще в написании, короче и понятнее. Про более объёмные задачи не скажу, у меня нет такого опыта.
0
Заблокирован
18.02.2017, 21:04 19
Цитата Сообщение от rdt Посмотреть сообщение
Легко, любой язык, не являющийся тьюринг-полным.
таких много?

Добавлено через 1 минуту
Цитата Сообщение от rdt Посмотреть сообщение
Возьмите некомпилируему версию лиспа.
ну, вот некомпилируемая версия возможно действительно будет соответствовать определению гомоиконности.

Добавлено через 1 минуту
Цитата Сообщение от _sg Посмотреть сообщение
или нет:
нет. я же Вам сказал, это можно сделать почти в любом динамическом языке. Там говорится о прямом доступе как к структуре.

Добавлено через 4 минуты
Цитата Сообщение от rdt Посмотреть сообщение
Думаю, не так много языков, поддерживающих регулярные выражения "из коробки". Perl не предлагать, он нечитаемый.
да ладно, lol, больше половины продакшн языков -- это точно. И наверняка почти все имеют стандартные либы.

Добавлено через 7 минут
Цитата Сообщение от rdt Посмотреть сообщение
Perl не предлагать, он нечитаемый.
это еще неизвестно, кто победит в плане нечитаемости, перл или лисп. К тому же в лиспе из-за кучи вложенностей очень трудно править код, без подсветки это вообще нереально будет.
Я дергаю лисп время от времени уже где-то года 2, и до сих пор он мне не кажется "удобным". Как раз, то что приписывается перлу -- write-only, это 100% про лисп, там проще функцию переписать, чем править.
Все эти разговоры про читаемость лиспа религиозны. Я никогда не поверю, что он кажется удобным в этом смысле кому бы то ни было, даже ветеранам. Кроме того, это "функциональный" порядок исполнения изнутри наружу и явная передача аргументов все усугубляют.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
нечитаемый
а квазиквотирование -- это вообще ад. про перл Вы прикололись это в сравнении с лиспом эталон читаемости и внятности кода
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
18.02.2017, 21:09 20
Цитата Сообщение от asmquest Посмотреть сообщение
Там говорится о прямом доступе как к структуре.
Lisp
1
2
3
4
CL-USER> (symbol-plist 'make-fun)
(SYSTEM::DEFINITION
 ((DEFUN MAKE-FUN (X Y Z) (+ X Y Z)) .
  #(NIL NIL NIL NIL ((DECLARATION OPTIMIZE DECLARATION)))))
Добавлено через 1 минуту
https://metadeus.wordpress.com... выражения/
0
18.02.2017, 21:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2017, 21:09
Помогаю со студенческими работами здесь

Мультидиспетчеризация в Лиспе
Допустим, имеем иерархию Животное Млекопитающее Собака Кошка Земноводное...

Вывод в лиспе
(defun main() (setq a 5) ;как вывести: a = 5? ) (main)

Пятнашки на лиспе
Помогите пожалуйста разобраться в коде. Как произвести ввод данных? (defstruct board r c cells)...

«Организация вычислений в Лиспе»
Помогите пожалуйста решить: 2. Написать с помощью композиции условных выражений функции от четырех...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru