> 1 <

Автор Сообщение

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 63

#1496   2010-02-19 22:46 GMT+3 часа(ов)      
Элементарная реализация Лиспа - HomeLisp (http://homelisp.ru). Среда - Windows (любой версии). Есть подробная документация. Программа - FreeWare.

misha

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1498   2010-02-20 00:43 GMT+3 часа(ов)      
Я слишком консервативен. Почему бы Вам не создать полноценную реализацию, например, любого из диалектов Лиспа: ISLISP, Scheme, Common Lisp.

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 63

#1499   2010-02-20 00:56 GMT+3 часа(ов)      
Может быть, и до этого дойдет. А Вы посмотрели, что есть и чего нет в HomeLisp-е?

misha

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1500   2010-02-20 01:08 GMT+3 часа(ов)      
Ваш проект хорош, но мне нужна совместимость с другими диалектами на уровне библиотек. Это пока главный его недостаток.

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 63

#1501   2010-02-20 01:26 GMT+3 часа(ов)      
Ну, что же, надо будет заняться...

asbest

Members


Статус

64 сообщений

Где: Russia
Род занятий:
Возраст: 43

#1506   2010-02-24 09:57 GMT+3 часа(ов)      
Значения, присваиваемые атомам с помощью конструкций SET/SETQ хранятся в ассоциативном списке.

Как-то непривычно, что атомам можно присваивать значения.

(setq "строка" "я атом") что ли?

Это символам можно присвоить значение. Ну и обобщенным переменным - ячейкам массивов и т.п.

Беда данной системы, что книгу Лаврова и Сигаладзе очень трудно найти. А так можно было бы создать свой русский диалект лиспа...

отредактировал(а) asbest: 2010-02-24 10:26 GMT+3 часа(ов)

misha

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1507   2010-02-24 11:53 GMT+3 часа(ов)      
Понятия атом и символ - эквивалентны.

asbest

Members


Статус

64 сообщений

Где: Russia
Род занятий:
Возраст: 43

#1508   2010-02-24 12:18 GMT+3 часа(ов)      
О чем я и говорю - в этой книге может быть написано что угодно и никто не проверит. А Hyperspec есть в интернете. Раньше было не так - не было интернета и английского никто не знал, поэтому реально было то, что написано у Лаврова и Сигаладзе, а стандарт был неким миражом, фикцией.

Вот из гиперспека (основанного на стандарте):

Type ATOM
Supertypes:
atom, t
Description:
It is equivalent to (not cons).

Это значит, что строка, число, символ и многое другое есть атом. Даже поток это атом.

misha

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1509   2010-02-24 13:49 GMT+3 часа(ов)      
Существует всего три стандартизированных диалекта лиспа: ISLISP, Scheme, Common Lisp. Для них можно найти необходимые библиотеки, т.е. не нужно создавать велосипеды.

В Схеме, например, используется понятие символ (symbol), а не атом. Символом(атомом) может служить любая последовательность букв, цифр и специальных символов, заключенная между символами вертикальной черты(|). При этом учитывается регистр.
> (set! |a, b, c| 99)
> (string->symbol "a, b, c")
|a, b, c|
> (eval (string->symbol "a, b, c"))
99
> (eval (string->symbol " a, b, c"))
Error: variable | a, b, c| is not bound.
> (eval (string->symbol "a, B, c"))
Error: variable |a, B, c| is not bound.

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1510   2010-02-24 17:29 GMT+3 часа(ов)      
(define |a, b, c| <value>) забыл.

asbest

Members


Статус

64 сообщений

Где: Russia
Род занятий:
Возраст: 43

#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

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1512   2010-02-24 18:41 GMT+3 часа(ов)      
> (define |a, b, c| <value>) забыл.
У меня была включена поддержка r6rs.
> Наверняка в схеме есть функция atom, что она говорит на числа и строки?
Я же писал, что в стандарте слово atom не используется, его заменили на symbol?.
> А диалектов лиспа пожалуй побольше будет...
Прошедших стандартизацию всего три.

misha

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1513   2010-02-24 19:03 GMT+3 часа(ов)      
Символ - это идентификатор, простой объект содержащий имя(последовательность любых разрешенных символов). Атом - это более обобщенное понятие, и в схеме не используется(хотя многие реализации поддерживают atom?).

Поведение symbol? отличается от atom.
> (symbol? '())
#f
> (symbol? 123)
#f
> (symbol? "asd")
#f
> (symbol? 'asd)
#t

отредактировал(а) misha: 2010-02-24 20:14 GMT+3 часа(ов)

Михаил

Members


Статус

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 часа(ов)

Михаил

Members


Статус

120 сообщений

Где: ---
Род занятий:
Возраст:

#1515   2010-02-24 21:33 GMT+3 часа(ов)      
В отличие от других диалектов Лиспа, пустой список "()" в Схеме трактуется как истина.

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 63

#1516   2010-02-25 03:32 GMT+3 часа(ов)      
Цитата
asbest :
Значения, присваиваемые атомам с помощью конструкций SET/SETQ хранятся в ассоциативном списке.

Как-то непривычно, что атомам можно присваивать значения.

(setq "строка" "я атом") что ли?

Это символам можно присвоить значение. Ну и обобщенным переменным - ячейкам массивов и т.п.

Беда данной системы, что книгу Лаврова и Сигаладзе очень трудно найти. А так можно было бы создать свой русский диалект лиспа...



Не (setq "строка" "я атом") - это вызовет ошибку, а (setq aa "я атом") - после чего атом aa получит ЗНАЧЕНИЕ "я атом". Значением атома может быть другой атом или список. И не в том дело, что книга Лаврова и Силагадзе издана давно, а в том - что это во всех Лиспах так. Можете проверить или заглянуть в более свежие книги. "Мир Лиспа" например...

asbest

Members


Статус

64 сообщений

Где: Russia
Род занятий:
Возраст: 43

#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

Moderators


Статус

1273 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#1518   2010-02-25 14:43 GMT+3 часа(ов)      
Арсений, а почему бы вам не посетить страничку http://homelisp.ru. Почитайте документацию. Книга не нужна - реализация и так хорошо описана.
> 1 <


Онлайн :

0 пользователь(ей), 8 гость(ей) :




Реклама на сайте: