Предыдущая страница [1] > 2 <

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

Kergan

Members


Статус

300 сообщений

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

#7077   2013-06-11 10:13 GMT+3 часа(ов)      
Цитата
Где это ты видел Lisp без списков?


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

Цитата
Тогда зачем syntax-case?

за тем, что работая через match ты вынужден отказаться от многочисленных плющек, предоставляемых синтаксическими объектами - та же гигиена (и описанное тобой связывание идентификаторов по месту опредеделения), например. То есть - какой смысл использовать match, если syntax-case ничем не сложнее но предоставляет множество возможностей просто искаробки, не требуя никаких затрат?

Цитата
И как получить значение этого yoba?

(syntax-local-value #'let)

вообще можно например вот так сделать:
(define syntax yoba (let ([let (syntax-local-value #'let)]) (compose let let)))
соответственно yoba - будет композиция функции соответствующей let самой с собой.

snv

Members


Статус

25 сообщений
http://sym.at.ua/load
Где: Russia Серпухов
Род занятий: Безработный
Возраст: 32

#7078   2013-06-11 17:47 GMT+3 часа(ов)      
Цитата
Kergan :
ну вот в схеме я безо всяких списков могу спокойно макросы писать. значит если в общелиспе нужны списки для написания макросов - добавляй их к defmacro.

Scheme нет list?


Цитата
за тем, что работая через match ты вынужден отказаться от многочисленных плющек, предоставляемых синтаксическими объектами - та же гигиена

Но мои предложенные мною макросы поддерживают сразу match и гигиену. Выходит define-syntax макросы ущербны, раз с ними не работают стандартные средства и приходится изобретать велосипед, типа syntax-rules.

(и описанное тобой связывание идентификаторов по месту опредеделения), например.

Цитата
То есть - какой смысл использовать match, если syntax-case ничем не сложнее но предоставляет множество возможностей просто искаробки, не требуя никаких затрат?

syntax-case - лишняя сущность. Многие например не любят Java за её "class Main { static public void main" (это всё лишние сущности), аналогом которой является define-syntax в Scheme.

Цитата
(syntax-local-value #'let)

Ритуалы какие-то.

Цитата
вообще можно например вот так сделать:
(define syntax yoba (let ([let (syntax-local-value #'let)]) (compose let let)))
соответственно yoba - будет композиция функции соответствующей let самой с собой.

Но зачем? [Linux дома]
The hour will come in which all the peoples of the earth will awake, and the Jews will be the victims. -- Joseph Goebbels, 21 January 1945

Kergan

Members


Статус

300 сообщений

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

#7079   2013-06-11 19:09 GMT+3 часа(ов)      
Цитата
Scheme нет list?

есть. но для написания макросов он не нужен. а мы же сравниваем функции, необходимые для написания макросов, так? если же сравнивать всю библиотеку - ну тут общелисп у минималистичной по дизайну схемки точно соснет.

Цитата
Но мои предложенные мною макросы поддерживают сразу match и гигиену.

нет, не поддерживают.

Цитата
Выходит define-syntax макросы ущербны, раз с ними не работают стандартные средства

опять ты повторяешь эту глупость. сказали же уже - работают.

Цитата
и приходится изобретать велосипед, типа syntax-rules.

еще раз - можешь писать на match, если хочешь, но зачем, если есть лучшая альтернатива?

Цитата
например

что "например"? если ты хочешь связывать идентификаторы по месту определения, то ты уже не можешь представлять идентификатор обычным symbol. Придется делать специальный враппер вокруг symbol'a, в котором будет лежать информация о связывании. Вот этот враппер и будет называть "синтаксический объект".
в racket просто пошли несколько дальше - если мы делаем врапперы вокруг символов, то почему бы не делать такие вокруг списков? это же будет вполне логично и естественно.

Цитата
syntax-case - лишняя сущность.

это вообще никакая не сущность. и уж тем более не лишняя. ее в ядре языка нет (в отличии от того же define-syntax) syntax-case - это обычный библиотечный макрос. По твоей логике любая функция для работы со списками - дишняя сущность, т.к. достаточно car/cdr/cons. Значит надо из библиотеки все ф-и кроме трех указанных убирать или что? map, например - лишняя сущность. И flatten. И take. Да все.

Цитата
Ритуалы какие-то.

никаких ритуалов. просто получаем значение. а как то же самое сделать в CL?

Цитата
Но зачем?

Это просто пример, демонстрирующий, что макросы - обычные ф-и, с которыми можно делать все то же самое, что с обычными ф-ями (композировать, например). И то, что макрос принимает только один аргумент в данном случае плюс, т.к. последовательность шагов макроэкспанда в данном случае - композиция шагов, в отличии от CL, где все значительно сложнее.

snv

Members


Статус

25 сообщений
http://sym.at.ua/load
Где: Russia Серпухов
Род занятий: Безработный
Возраст: 32

#7080   2013-06-11 19:59 GMT+3 часа(ов)      
Цитата
Kergan :
есть. но для написания макросов он не нужен.

Т.е. был изобретён велосипед, вместо утилизации проверенного средства языка?

Цитата
если же сравнивать всю библиотеку - ну тут общелисп у минималистичной по дизайну схемки точно соснет.

А я и не спорю, что в CL много неудачных решений. Но и в Scheme их достаточно.

Цитата
нет, не поддерживают.

Поддержтвают. Например:
 
if @Xs => match Xs | A then B else C: form: builtinIf A B C
| A then B: form: builtinIf A B no
| @?: error "bad syntax'


Цитата
опять ты повторяешь эту глупость. сказали же уже - работают.

Так зачем изобретать колесо?

Цитата
еще раз - можешь писать на match, если хочешь, но зачем, если есть лучшая альтернатива?

Чем лучшая?

Цитата
если ты хочешь связывать идентификаторы по месту определения, то ты уже не можешь представлять идентификатор обычным symbol. Придется делать специальный враппер вокруг symbol'a, в котором будет лежать информация о связывании. Вот этот враппер и будет называть "синтаксический объект".

Можно вместо symbol применить обычные string, у которых как известно уникальные адреса, на которые можно повесить (через хэш-таблицу) любую мета-инфу. Далее, если символы реализованы как замыкания, то их можно обернуть в лямбду-делегат, которая немного модифицирует их поведение, с виду оставляя обычными символами. Или, если у нас обычная ООП система, можно наследовать в стиле class CMacroSymbol:CBasicSymbol {...}. Возможности обойтись без syntax-object ограничены лишь твоей фантазией.

Цитата
в racket просто пошли несколько дальше - если мы делаем врапперы вокруг символов, то почему бы не делать такие вокруг списков? это же будет вполне логично и естественно.

Проблема, что Схемовские врапперы путаются под ногами и вводят дополнительный http://c2.com/cgi/wiki?GodObject (к уже имеющимся cons, number и symbol).

Цитата
это вообще никакая не сущность. и уж тем более не лишняя. ее в ядре языка нет (в отличии от того же define-syntax) syntax-case - это обычный библиотечный макрос.

Я тебя удивлю: всё в компьютере выражается всего через одну функцию - http://en.wikipedia.org/wiki/NAND_logic (эквивалентный http://en.wikipedia.org/wiki/Binary_lambda_calculus)
Минималистичней некуда. Всего один примитивнейший оператор, который даже твоя кошка способна понять. Однако в результате получаются монструозные системы, типа PHP, хотя весь PHP код и раскрывается в NAND.

Цитата
По твоей логике любая функция для работы со списками - дишняя сущность, т.к. достаточно car/cdr/cons. Значит надо из библиотеки все ф-и кроме трех указанных убирать или что? map, например - лишняя сущность. И flatten. И take. Да все.

Что-то в твоей идее есть. Refal например обходится без них. Ибо CAR и CDR слишком низкоуровневые функции, заменяемые паттерн-матчингом в стиле ([X@Xs] => X) и ([X@Xs] => Xs), а map элементарно делается через ([X@Xs] => list F.X @self.Xs)

Цитата
никаких ритуалов. просто получаем значение. а как то же самое сделать в CL?

http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/acc_macro-function.html

Цитата
Это просто пример, демонстрирующий, что макросы - обычные ф-и, с которыми можно делать все то же самое, что с обычными ф-ями (композировать, например). И то, что макрос принимает только один аргумент в данном случае плюс, т.к. последовательность шагов макроэкспанда в данном случае - композиция шагов, в отличии от CL, где все значительно сложнее.

Чем CL сложней?
The hour will come in which all the peoples of the earth will awake, and the Jews will be the victims. -- Joseph Goebbels, 21 January 1945

Kergan

Members


Статус

300 сообщений

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

#7081   2013-06-11 20:45 GMT+3 часа(ов)      
Цитата
Т.е. был изобретён велосипед, вместо утилизации проверенного средства языка?

почему же вместо? он имеет функционал, которого match не имеет. и это такое же проверенное средство.

Цитата
Поддержтвают. Например:

я тоже могу придумать код на каком=-то не существующем языке. обычный match по определению не может поддерживать гигиену.

Цитата
Чем лучшая?

значительно более широкий функционал без повышения затрат.

Цитата
Так зачем изобретать колесо?

а никто и не изобретает

Цитата
Можно вместо symbol применить обычные string, у которых как известно уникальные адреса, на которые можно повесить (через хэш-таблицу) любую мета-инфу. Далее, если символы реализованы как замыкания, то их можно обернуть в лямбду-делегат, которая немного модифицирует их поведение, с виду оставляя обычными символами. Или, если у нас обычная ООП система, можно наследовать в стиле class CMacroSymbol:CBasicSymbol {...}. Возможности обойтись без syntax-object ограничены лишь твоей фантазией.

ты пока что предложил разные споссбы реализации syntax object, которые ничего не меняю с точки зрения использования. хреновая у тебя фантазия, видно.

Цитата
Проблема, что Схемовские врапперы путаются под ногами и вводят дополнительный http://c2.com/cgi/wiki?GodObject (к уже имеющимся cons, number и symbol).

либо дополнительные врапперы - либо отсутствие гигиены. иначе никак.

Цитата
Я тебя удивлю:

не удивишь

Цитата
Что-то в твоей идее есть.

нет, в ней ничего нет

Цитата
http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/acc_macro-function.html

то есть также

Цитата
Чем CL сложней?

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

snv

Members


Статус

25 сообщений
http://sym.at.ua/load
Где: Russia Серпухов
Род занятий: Безработный
Возраст: 32

#7082   2013-06-12 07:31 GMT+3 часа(ов)      
Цитата
Kergan :
...



Мне надоело. И вообще я работу искал. Пока.
The hour will come in which all the peoples of the earth will awake, and the Jews will be the victims. -- Joseph Goebbels, 21 January 1945

Kergan

Members


Статус

300 сообщений

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

#7083   2013-06-12 08:01 GMT+3 часа(ов)      
И не возвращайся, золотце.

snv

Members


Статус

25 сообщений
http://sym.at.ua/load
Где: Russia Серпухов
Род занятий: Безработный
Возраст: 32

#7084   2013-06-13 16:00 GMT+3 часа(ов)      
Цитата
Kergan :
И не возвращайся, золотце.


лучше работу бы мне помог найти.
The hour will come in which all the peoples of the earth will awake, and the Jews will be the victims. -- Joseph Goebbels, 21 January 1945

Aoloa

Members


Статус

37 сообщений

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

#7102   2013-07-08 22:23 GMT+3 часа(ов)      
Цитата
Kergan :
Цитата
Ваши макросы основным недостатком syntax-case: невозможно уйти от гигены.

зачем говорить о том, о чем не знаешь? в syntax-case гигиена легко и просто снимается. проще, чем накладывается через генсим.


Прошу прощения, хотелось сказать syntax-rules, а написалось почему-то syntax-case.
With iTeX* your entire life can be encapsulated into a dynamic hyperdocument, downloadable by anybody you designate (Donald E. Knuth, An Earthshaking Announcement)


Онлайн :

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




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