1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013

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

17.02.2017, 17:04. Показов 3616. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru