Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013

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

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

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
CL -- это не единый консистентный язык, а среда разработки
Ясно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2017, 17:04
Ответы с готовыми решениями:

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

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

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

58
Заблокирован
18.02.2017, 22:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nullxdth Посмотреть сообщение
всегда корректная синтаксическая конструкция.
да ладно заливать то
Lisp
1
(foo lambda ok)
всегда, lol
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 22:17
Цитата Сообщение от asmquest Посмотреть сообщение
ну, ок, какое определение ты считаешь каноническим, если википедия тебя не устраивает.
Дай из википедии цитату, что по твоему является определением гомоиконности. Я там увидел исключительно какие-то рассуждения. Рассуждения может быть и полезные, но местами пространные.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
Lisp
1
(foo lambda ok)
И что тут не корректного?
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
18.02.2017, 22:18
Цитата Сообщение от asmquest Посмотреть сообщение
К тому же в лиспе из-за кучи вложенностей очень трудно править код, без подсветки это вообще нереально будет.
Я свои коротышки пишу в Блокноте, сложностей именно с правкой кода не замечал. При написании кода у меня нередко возникают проблемы с неправильно расставленными скобками, для борьбы с этим использую собственную программу для проверки скобок (люблю велосипедить).

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

Будет больше кода -> поставлю IDE -> будет подсветка скобок. Не вижу проблем.

Цитата Сообщение от asmquest Посмотреть сообщение
внезапно, очень даже читаемы


1) Я считаю, что квазицитирование в лиспе близко, по сложности, к использованию переменных в строках в перле.
2) В приведённых примерах на перле проблем нет, нужно, просто, запомнить три этих варианта использования.

То же самое с квазицитированием - нужно, просто, запомнить как оно работает. Одно вклинивается в строки, другое в синтаксические деревья - не вижу разницы.
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 22:18
Цитата Сообщение от asmquest Посмотреть сообщение
всегда, lol
Да, лiл, всегда.
0
Заблокирован
18.02.2017, 22:20
Цитата Сообщение от nullxdth Посмотреть сообщение
И что тут не корректного?
А что там корректного? заэвали это выражение, узнаешь
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 22:22
Цитата Сообщение от asmquest Посмотреть сообщение
А что там корректного? заэвали это выражение, узнаешь
Lisp
1
2
3
4
5
(flet ((foo (x y)
         (values x y)))
  (let ((lambda :foo)
        (ok :bar))
    (foo lambda ok)))
Eval-нул. Сработало. Что я делаю не так?
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
18.02.2017, 22:29
Давайте я переформулирую: AST - это уже частично распарсенный код программы. С ним проще работать чем просто с текстом программы.
0
Заблокирован
18.02.2017, 22:29
Цитата Сообщение от nullxdth Посмотреть сообщение
Что я делаю не так?
мозги компостируешь
пробуй это
Lisp
1
('foo (lambda) 'bar)
я хз что там за причуды, нет щас общелиспа на компе.
короче, если ты серьезно будешь сейчас раздоказывать, что любой список будет синтаксически корректным выражением на лиспе, я пас, это детсад
0
Заблокирован
18.02.2017, 22:31
Цитата Сообщение от rdt Посмотреть сообщение
Давайте я переформулирую: AST - это уже частично распарсенный код программы. С ним проще работать чем просто с текстом программы.
с этим согласен. Но хорошо это или плохо -- это еще вопрос, потому что выходит, что работа парсера просто облегчается засчет рук программиста.
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
18.02.2017, 22:33
asmquest, да, любой список является синтаксически корректным выражением на лиспе. Например, это могут быть, просто, данные.

Но, не любой список является корректной программой. "(foo lambda ok)" будет корректной программой только если есть функция "foo" и переменные "lambda" и "ok".
0
Заблокирован
18.02.2017, 22:35
Цитата Сообщение от rdt Посмотреть сообщение
Но, не любой список является корректной программой
и строка не любая будет корректной программой. а как данные -- всегда прокатит, дальше будем демагогию разводить?
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 22:49
Цитата Сообщение от asmquest Посмотреть сообщение
пробуй это
Попробовал.
Code
1
2
(quote
 ('foo (lambda) 'bar))
Почему я не получил синтаксическую ошибку?
0
Заблокирован
18.02.2017, 22:51
Цитата Сообщение от nullxdth Посмотреть сообщение
Почему я не получил синтаксическую ошибку?
JavaScript
1
"function what a fuck?"
А я почему не получил? Удивительно
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
18.02.2017, 22:52
Цитата Сообщение от asmquest Посмотреть сообщение
и строка не любая будет корректной программой.
Дело в том, что множество строк никогда не смогут быть корректными программами. Тогда как любые s-expressions в Lisp при определённом контексте - смогут.
0
Заблокирован
18.02.2017, 22:54
Цитата Сообщение от nullxdth Посмотреть сообщение
что множество строк никогда не смогут быть корректными программами
это почему же не могут, если они не выполняются, а используются как структуры данных?
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
19.02.2017, 00:00
Цитата Сообщение от asmquest Посмотреть сообщение
Это значит, что вы подали любую функцию на вход другой функции, и та работает с ней как со списком, безо всякой подготовки и прочих фокусов
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
(defun make-function-number-plus (n m)
  (loop for a from n to m do
        (make-function (add-plus a) '(z) `(+ z ,a))))
 
(defun add-plus (a)
  (read-from-string
   (concatenate 'string (write-to-string a) "+")))
 
(defun make-function (name parm body)
  (eval `(defun ,name ,parm ,body)))
 
(defun change (f &aux (g (get f 'SYSTEM::DEFINITION)))
  (setf (caar (cdddar g)) '*))
 
> (make-function-number-plus 5 10)
NIL
> (7+ 2000)
2007
> (get '7+ 'SYSTEM::DEFINITION)
((DEFUN 7+ (Z) (+ Z 7)) .
 #(NIL NIL NIL NIL ((DECLARATION OPTIMIZE DECLARATION))))
> (change '7+)
*
> (get '7+ 'SYSTEM::DEFINITION)
((DEFUN 7+ (Z) (* Z 7)) .
 #(NIL NIL NIL NIL ((DECLARATION OPTIMIZE DECLARATION))))
> (7+ 2000)
14000
> (change '10+)
*
> (10+ 2000)
20000
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.02.2017, 01:12
Цитата Сообщение от asmquest Посмотреть сообщение
короче, если ты серьезно будешь сейчас раздоказывать, что любой список будет синтаксически корректным выражением на лиспе, я пас, это детсад
Согласен. Моё утверждение:
Цитата Сообщение от nullxdth Посмотреть сообщение
Тогда как любые s-expressions в Lisp при определённом контексте - смогут.
Не верно.
Не любой S-expression может быть корректной вычисляемой Lisp-формой даже с синтаксической точки зрения.
Есть дополнительное ограничение. Если говорить строго: только подмножество S-expressions, где в compound form-ах первый элемент - символ.

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

Добавлено через 2 минуты
Цитата Сообщение от nullxdth Посмотреть сообщение
Есть дополнительное ограничение. Если говорить строго: только подмножество S-expressions, где в compound form-ах первый элемент - символ.
Вообщем-то даже Зейбель про это пишет. http://www.gigamonkeys.com/boo... ntics.html
S-expressions As Lisp Forms

After the reader has translated a bunch of text into s-expressions, the s-expressions can then be evaluated as Lisp code. Or some of them can--not every s-expressions that the reader can read can necessarily be evaluated as Lisp code. Common Lisp's evaluation rule defines a second level of syntax that determines which s-expressions can be treated as Lisp forms.9 The syntactic rules at this level are quite simple. Any atom--any nonlist or the empty list--is a legal Lisp form as is any list that has a symbol as its first element.
Добавлено через 14 минут
Цитата Сообщение от asmquest Посмотреть сообщение
это почему же не могут, если они не выполняются, а используются как структуры данных?
При такой постановки - да. Но в любом случае, Lisp обладает богатой функциональностью по работе с кодом, как с данными. Которая, с практической точки зрения, имеет решающее значение для комфортной кодогенерации, в отличии от функций по работе со строками в любом ЯП. Да, чисто теоретически, если у нас есть eval и мы можем долбить строки - то, вроде, как можем генерировать код и выполнять его. Но с практической точки зрения - этого явно недостаточно.
0
Заблокирован
19.02.2017, 01:12
nullxdth, ну, в общем то, с тем что у лиспа синтаксис проще чем у большинства языков никто и не спорил.
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
19.02.2017, 01:29
Цитата Сообщение от asmquest Посмотреть сообщение
К тому же в лиспе из-за кучи вложенностей очень трудно править код, без подсветки это вообще нереально будет.
Трудно в notepad. Для комфортного редактирования S-expressions нужны специализированные вещи. Как то emacs mode: paredit, например. Со одной стороны - это минус, ибо порог вхождения. С другой стороны - тот же paredit даёт возможность манипулировать кодом крайне эффективно, куда эффективнее, чем бороться, например, с исходниками на языках с позиционным синтаксисом.

Добавлено через 3 минуты
Касательно вложенностей, я уже не раз говорил, что скобки в Lisp никто не читает и, даже, никто не пишет. Скобки расставляет тот же paredit, а читают по отступам. Но тут можно говорить бесконечно. Переубедить человека, который никогда не писал и не читал код на Lisp, что это достаточно легко и нужна лишь небольшая практика - не возможно. Пока сам не попробуешь - не поймёшь, как говориться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2017, 01:29

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
Новые блоги и статьи
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru