Автор | Сообщение |
Файфель Б.Л.
61 сообщений |
#1496 2010-02-19 22:46 GMT+3 часа(ов) |
Элементарная реализация Лиспа - HomeLisp (http://homelisp.ru). Среда - Windows (любой версии). Есть подробная документация. Программа - FreeWare.
|
|
misha![]()
1275 сообщений |
#1498 2010-02-20 00:43 GMT+3 часа(ов) |
Я слишком консервативен. Почему бы Вам не создать полноценную реализацию, например, любого из диалектов Лиспа: ISLISP, Scheme, Common Lisp.
|
|
Файфель Б.Л.
61 сообщений |
#1499 2010-02-20 00:56 GMT+3 часа(ов) |
Может быть, и до этого дойдет. А Вы посмотрели, что есть и чего нет в HomeLisp-е?
|
|
misha![]()
1275 сообщений |
#1500 2010-02-20 01:08 GMT+3 часа(ов) |
Ваш проект хорош, но мне нужна совместимость с другими диалектами на уровне библиотек. Это пока главный его недостаток.
|
|
Файфель Б.Л.
61 сообщений |
#1501 2010-02-20 01:26 GMT+3 часа(ов) |
Ну, что же, надо будет заняться...
|
|
asbest
64 сообщений |
#1506 2010-02-24 09:57 GMT+3 часа(ов) |
Значения, присваиваемые атомам с помощью конструкций SET/SETQ хранятся в ассоциативном списке.
Как-то непривычно, что атомам можно присваивать значения. (setq "строка" "я атом") что ли? Это символам можно присвоить значение. Ну и обобщенным переменным - ячейкам массивов и т.п. Беда данной системы, что книгу Лаврова и Сигаладзе очень трудно найти. А так можно было бы создать свой русский диалект лиспа... отредактировал(а) asbest: 2010-02-24 10:26 GMT+3 часа(ов) |
|
misha![]()
1275 сообщений |
#1507 2010-02-24 11:53 GMT+3 часа(ов) |
Понятия атом и символ - эквивалентны.
|
|
asbest
64 сообщений |
#1508 2010-02-24 12:18 GMT+3 часа(ов) |
О чем я и говорю - в этой книге может быть написано что угодно и никто не проверит. А Hyperspec есть в интернете. Раньше было не так - не было интернета и английского никто не знал, поэтому реально было то, что написано у Лаврова и Сигаладзе, а стандарт был неким миражом, фикцией.
Вот из гиперспека (основанного на стандарте): Type ATOM Supertypes: atom, t Description: It is equivalent to (not cons). Это значит, что строка, число, символ и многое другое есть атом. Даже поток это атом. |
|
misha![]()
1275 сообщений |
#1509 2010-02-24 13:49 GMT+3 часа(ов) |
Существует всего три стандартизированных диалекта лиспа: ISLISP, Scheme, Common Lisp. Для них можно найти необходимые библиотеки, т.е. не нужно создавать велосипеды.
В Схеме, например, используется понятие символ (symbol), а не атом. Символом(атомом) может служить любая последовательность букв, цифр и специальных символов, заключенная между символами вертикальной черты(|). При этом учитывается регистр. > (set! |a, b, c| 99) |
|
Михаил
120 сообщений |
#1510 2010-02-24 17:29 GMT+3 часа(ов) |
(define |a, b, c| <value>) забыл.
|
|
asbest
64 сообщений |
#1511 2010-02-24 17:48 GMT+3 часа(ов) |
В Common Lisp то же самое, можно создавать причудливые символы между вертикальными чертами. Наверняка в схеме есть функция atom, что она говорит на числа и строки? В Common Lisp она возвращает T. Я тут нашел в CLTL2, что в INTERLISP атомами были только символы и числа.
In some Lisp dialects, notably Interlisp, only symbols and numbers are considered to be atoms; arrays and strings are considered to be neither atoms nor lists (conses). А диалектов лиспа пожалуй побольше будет... |
|
misha![]()
1275 сообщений |
#1512 2010-02-24 18:41 GMT+3 часа(ов) |
> (define |a, b, c| <value>) забыл.
У меня была включена поддержка r6rs. > Наверняка в схеме есть функция atom, что она говорит на числа и строки? Я же писал, что в стандарте слово atom не используется, его заменили на symbol?. > А диалектов лиспа пожалуй побольше будет... Прошедших стандартизацию всего три. |
|
misha![]()
1275 сообщений |
#1513 2010-02-24 19:03 GMT+3 часа(ов) |
Символ - это идентификатор, простой объект содержащий имя(последовательность любых разрешенных символов). Атом - это более обобщенное понятие, и в схеме не используется(хотя многие реализации поддерживают atom?).
Поведение symbol? отличается от atom. > (symbol? '()) отредактировал(а) misha: 2010-02-24 20:14 GMT+3 часа(ов) |
|
Михаил
120 сообщений |
#1514 2010-02-24 21:19 GMT+3 часа(ов) |
r5rs:
3.2. Disjointness of types No object satisfies more than one of the following predicates: boolean? pair? symbol? number? char? string? vector? port? procedure? These predicates define the types boolean, pair, symbol, number, char (or character), string, vector, port, and procedure. The empty list is a special object of its own type; it satisfies none of the above predicates. Although there is a separate boolean type, any Scheme value can be used as a boolean value for the purpose of a conditional test. As explained in section 6.3.1, all values count as true in such a test except for #f. This report uses the word "true" to refer to any Scheme value except #f, and the word "false" to refer to #f. отредактировал(а) Михаил: 2010-02-24 21:29 GMT+3 часа(ов) |
|
Михаил
120 сообщений |
#1515 2010-02-24 21:33 GMT+3 часа(ов) |
В отличие от других диалектов Лиспа, пустой список "()" в Схеме трактуется как истина.
|
|
Файфель Б.Л.
61 сообщений |
#1516 2010-02-25 03:32 GMT+3 часа(ов) |
Цитата Не (setq "строка" "я атом") - это вызовет ошибку, а (setq aa "я атом") - после чего атом aa получит ЗНАЧЕНИЕ "я атом". Значением атома может быть другой атом или список. И не в том дело, что книга Лаврова и Силагадзе издана давно, а в том - что это во всех Лиспах так. Можете проверить или заглянуть в более свежие книги. "Мир Лиспа" например... |
|
asbest
64 сообщений |
#1517 2010-02-25 06:17 GMT+3 часа(ов) |
В Common Lisp, приверженцем которого я являюсь, символ это одно, а атом - другое. Мне кажется, это правильно с точки зрения того, что атом по смыслу слова - это "неделимый обьект", а символ - "графическое представление чего-то". Вектора могли бы и не быть атомами, но если мы говорим о списках - есть cons и atom. Так и в Common Lisp и, судя, по приведенному выше, в Scheme, причем Схема пошла дальше и вообще исключила понятие "атом". Да и правильно, его (предикат) легко определить. Но, поскольку система называется (Home) Lisp, упоминание Scheme уводит нас в сторону. И вообще, мой вопрос был к тому, что было бы полезно выяснить, к какому диалекту ближе всего реализованный Вами язык (описанный в недоступной для меня книге Л-С). Может быть, Lisp 1.5? Тогда пользователь бы знал, что он изучает, разбираясь с системой.
Арсений отредактировал(а) asbest: 2010-02-25 06:28 GMT+3 часа(ов) |
|
misha![]()
1275 сообщений |
#1518 2010-02-25 14:43 GMT+3 часа(ов) |
Арсений, а почему бы вам не посетить страничку http://homelisp.ru. Почитайте документацию. Книга не нужна - реализация и так хорошо описана.
|
|