3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
|
||||||
1 | ||||||
Синтаксис Lisp30.11.2015, 01:06. Показов 1077. Ответов 7
Метки нет (Все метки)
Здравствуйте! Помогите пожалуйста разобраться.
Добавлено через 52 минуты Хотя, здесь же на просторах форума был найден ответ... Google Common Lisp Style Guide
0
|
30.11.2015, 01:06 | |
Ответы с готовыми решениями:
7
Помогите пожалуйста переделать синтаксис MuLisp в Comon Lisp (обращение списка) Помогите пожалуйста переделать синтаксис MuLisp в Comon Lisp (является ли список атомарным) Помогите пожалуйста переделать синтаксис MuLisp в Comon Lisp (проверка длины списка) Книги или другой источник, где описана история версий Lisp и Common Lisp |
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
30.11.2015, 01:51 | 2 |
Обычно код на лиспе состоит из многоуровневых списков. Эти списки «вычисляются». Первый символ списка задаёт правило вычисления. Например, если первый символ — имя функции, правило такое: вычислить все последующие элементы списка и применить к ним функцию как к аргументам.
А если первый символ — defun, правило другое: если упрощённо (то есть немного соврать), то второй элемент должен быть символом, который не вычисляется и будет служить глобальным именем функции, третий элемент — список аргументов, а остальные элементы — формы, которые задают тело определяемой функции; основным результатом вычисления defun-списка является побочный эффект: создание глобальной функции с заданным именем. Если первым списком является let, то предполагается, что второй элемент является перечнем локальных переменных, и последующие элементы вычисляются с учётом этих переменных. И так далее. Более того, программист может определять собственные правила вычисления списков. Это значит, что программист может создавать новый синтаксис. Это отдельный вопрос. В лиспе есть несколько пространств имён. Особо важно понимать, что есть отдельное пространство имён для переменных и для функций. Я напишу неформально, то есть не в терминах стандарта. В качестве имён обычно выступают символы. Разные пространства имён обозначают, что в зависимости от контекста символ можен интерпретироваться или как переменная, или как имя функции (или как метка, например). Надо понимать, что есть такие объекты под названием функция, они могут иметь имя и могут быть значениями переменных. При дефолтном вычислении списка символ интерпретируется как имя функции только в головной позиции списка. Но иногда мы хотим «достать» саму функцию, имя которой мы знаем — чтобы её как-то использовать. Это делается с помощью специального оператора function. Например, (function <=) — это функция (кусок кода) с именем <=, а (function sin) — функция вычисления синуса. Запись с #' является сокращённой формой того же самого: #'<= есть ровно то же, что (function <=). (#' — это так называемый макрос чтения, который ещё во время чтения файла заменит #'<= на (function <=)). Функция apply в простейшем случае принимает два аргумента: функцию и список, и вычисляет функцию с аргументами, содержащимися в списке. Поэтому вы пишете (apply #'<= mylist) — здесь на втором месте, как было сказано, стоит сама функция «меньше или равно». Если написать (apply <= mylist), символ <= будет интерпретироваться как переменная, и если вы не заводили такой переменной, будет ошибка.
4
|
3 / 3 / 1
Регистрация: 21.10.2015
Сообщений: 92
|
|
30.11.2015, 02:15 [ТС] | 3 |
helter
Ого! спасибо большое)
0
|
30.11.2015, 02:40 | 4 | |||||
А если это Лисп-1 с общим пространством имен, да еще и с автоцитированием, то будет работать и так:
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|||||||||||
30.11.2015, 02:51 | 5 | ||||||||||
Это не совсем то.
Например, mapcar применяет функцию к элементам списка:
1
|
Модератор
|
||||||
30.11.2015, 09:54 | 6 | |||||
- если заводили - тоже. Но в другом месте.
Когда использовать решетку? Вот примеры:
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||||||||||||
30.11.2015, 16:42 | 7 | |||||||||||||||
Да вроде нет, откуда бы.
Решётка с лямбдой - особый разговор. Не вникая в детали, можно сказать так: её можно писать, а можно не писать, исключительно вопрос вкуса. Исключение: на первом месте списка её нельзя писать. Впрочем, на первое место списка лямбда залезает нечасто. Получается:
1
|
Модератор
|
||||||
30.11.2015, 16:48 | 8 | |||||
- я имел в виду случай присвоения не функционального значения. Ошибка будет в том же месте (тут я неправ):
1
|
30.11.2015, 16:48 | |
30.11.2015, 16:48 | |
Помогаю со студенческими работами здесь
8
Организация циклов в Lisp (bee lisp demo) Парсер lisp на lisp PC-Lisp v.3.00 lisp Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |