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

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

Kergan

Members


Статус

300 сообщений

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

#5220   2011-12-04 08:36 GMT+3 часа(ов)      
> Так говоришь, будто бы не существует Template Haskell.

Ну это же кривой неюзабельный костыль.

misha

Moderators


Статус

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

#5223   2011-12-04 15:14 GMT+3 часа(ов)      
joba
>Не любишь макросы - юзай haskell

Так говоришь, будто бы не существует Template Haskell.
Я этого не говорил Кстати, название говорит само за себя

joba
>Нужны обоснования? Стучи в личку. Тут срач разводить не стоит.

Ну тогда писал бы мне сразу в личку свое "В данном случае использование eval довольно кривой подход, лучше написать макрос или использовать case". Сам "срач" развел, сам же теперь и свел.
Срач начинается со второго сообщения Ты постоянно пытаешься заставить перед тобой распинаться, хотя ты сам еще ничего не обосновал. Где доказательства правильности твоего подхода?
Может не стоит провоцировать модератора?

joba
>Макрос - это макрос, он не может быть ограниченной версией функции

Я имел в виду, что тот макрос check-type-of-instance наследует слишком малую часть функциональности объекта check-type-of-instance, который функция использующая eval. Можно написать другой макрос, который будет наследовать больше функциональности того объекта-функции, но тогда он не будет "быстрее", как ты говорил. А сравнивать эффективность в каком-то плане двух объектов, которые имеют разную функциональность, бессмысленно.
"но тогда он не будет "быстрее", как ты говорил" - где я тут сравнивал скорость работы функции и макроса?

joba
>Погугли

По запросу, например, 'eval is evil' там какая-то хрень про php и прочий мусор. Короче, давай конкретные ссылки, где обосновывается почему eval "в данном случае" "довольно кривой подход", если сам не можешь обосновать. Или же признай, что ты просто ляпнул свое "экспертное" мнение про использование eval лишь бы ляпнуть, и на этом тогда закончим.

А добавить scheme пробовал?

joba

Members


Статус

157 сообщений

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

#5227   2011-12-04 19:24 GMT+3 часа(ов)      
>Я этого не говорил

Что тогда значит "Не любишь макросы - юзай haskell"?

>Срач начинается со второго сообщения
>Где доказательства правильности твоего подхода?

А где я говорил (во втором сообщении темы), что он правильный?

>"но тогда он не будет "быстрее", как ты говорил" - где я тут сравнивал скорость работы функции и макроса?

Здесь Сообщение #5198
>...логичнее было бы использовать case или написать макрос... Тем более что так будет гораздо эффективнее(быстрее), чем вызывать каждый раз eval.

>А добавить scheme пробовал?

Пробовал. Нашел вот это. http://community.schemewiki.org/?scheme-faq-language
>Firstly, eval should only be used when its absolutely necessary - "eval is evil" is a common saying among Schemers.

Офигительное обоснование: "нельзя, потому что так четкие пацаны сказали".

>Beginners often make the mistake of employing eval when a combination of closures, quasiquotation and macros would achieve the same effect.

А если нужна именно функция, а не макрос, то ошибкой будет наоборот писать макрос. На фиг нужен такой макрос check-type-of-instance, который даже на простом (check-type-of-instance (list-ref L n) 123) зафейлится?

misha

Moderators


Статус

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

#5228   2011-12-04 20:07 GMT+3 часа(ов)      
>Что тогда значит "Не любишь макросы - юзай haskell"?

А то и значит)

>А где я говорил (во втором сообщении темы), что он правильный?

Ага, значит он неправильный) Здорово получается! И тебе еще нужны обоснования?

>Здесь Сообщение #5198

Так речь шла о том, что (type? instance) быстрее ((eval (string->symbol (string-append type "?"))) instance).

>Офигительное обоснование: "нельзя, потому что так четкие пацаны сказали".

Четкие пацаны редко используют eval.
Причины.
1) Только r5rs требует его наличия. В r6rs eval доступен через библиотеки, но не везде он реализован.
2) eval ничего не знает о лексических переменных, т.е. ему доступен лишь глобальный контекст. Но для этого ему необходимо настроить environment(ты этого так и не сделал!), но это также не всегда возможно.
3) Т.к. eval все-таки велосипед, его адекватная работа возможна только в рантайме. Т.е. не все реализации позволяют его использовать во время загрузки модуля(например, racket не позволяет его использовать, если неправильно настроено окружение).

>На фиг нужен такой макрос check-type-of-instance, который даже на простом (check-type-of-instance (list-ref L n) 123) зафейлится?

У меня, кстати, даже защита выставлено от подобного фэйла. Если тебе нужна функция, так и используй нормальную функцию, а не городи велосипеды с eval-ом.

joba

Members


Статус

157 сообщений

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

#5234   2011-12-04 21:32 GMT+3 часа(ов)      
>А то и значит)

Т.е. то, что ты не признаешь существование макрорасширения Template Haskell.

>>А где я говорил (во втором сообщении темы), что он правильный?
>Ага, значит он неправильный)

Нет, это значит, что я вообще не говорил о правильности или неправильности каких-то подходов. Это ты говорил, что подход с eval неправильный. Вот и обоснуй теперь.

>Так речь шла о том, что (type? instance) быстрее ((eval (string->symbol (string-append type "?"))) instance).

Тогда ok. С этим я не спорю.

>Только r5rs требует его наличия. В r6rs eval доступен через библиотеки, но не везде он реализован.

r6rs Standard Libraries это тоже часть r6rs. Так что, r6rs тоже требует наличие eval. Кстати, syntax-case тоже лишь в стандартной библиотеке r6rs. Так что, по твоей логике r6rs не требует и syntax-case.

>eval ничего не знает о лексических переменных, т.е. ему доступен лишь глобальный контекст.

В eval можно передавать необходимый environment, ты сам сказал.

>Т.к. eval все-таки велосипед, его адекватная работа возможна только в рантайме.

Как и любой другой функции.

>Если тебе нужна функция, так и используй нормальную функцию, а не городи велосипеды с eval-ом.

Сам ты велосипед. Задача вот какая
Цитата
Я хочу написать функцию, которая на вход получала бы имя типа и некий экземпляр, а на выходе говорила #t или #f в зависимости от того, совпадает ли тип экземпляра с указанным мной типом; при этом я хочу что бы функция выглядела как-то так:
(define (check-type-of-instance type instance)
(<значение type>? instance))

Собственно, вопрос: как сделать так, что бы значение формального параметра type "превращалось" в type? в теле определения?

Без eval ее не решить. И точка.

misha

Moderators


Статус

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

#5235   2011-12-04 21:52 GMT+3 часа(ов)      
>Т.е. то, что ты не признаешь существование макрорасширения Template Haskell.

Шаблоны от макросов отличить не можешь

>Это ты говорил, что подход с eval неправильный. Вот и обоснуй теперь.

Я уже обосновал. Если до тебя не доходит, то это в тебе проблема.

>Так что, r6rs тоже требует наличие eval. Кстати, syntax-case тоже лишь в стандартной библиотеке r6rs. Так что, по твоей логике r6rs не требует и syntax-case.

Это по твоей логике syntax-case не входит в base, поэтому он может быть не реализован.
Не съезжай с темы! Давай обосновывай чем твой подход лучше!

>В eval можно передавать необходимый environment, ты сам сказал.

Тебе доки читать влом? Думаешь мне приятно объяснять тому, кто меня пытается дразнить?

>Сам ты велосипед. Задача вот какая
>Без eval ее не решить. И точка.

А ты пробовал? Я думаю, топикастер уже нашел адекватное решение.
(define (check-type-of-instance type instance)
(case type
[(type-a) (a? instance)]
[(type-b) (b? instance)]
[else #f]))
Даже такое решение быстрее твоего галиматья. Тем более, что он писал: "в одном из фрагментов кода получить список текущих типов, что бы потом брать типы из этого списка и проверять соответствия им при работе к каждым конкретным экземпляром".

joba

Members


Статус

157 сообщений

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

#5237   2011-12-05 00:00 GMT+3 часа(ов)      
>Шаблоны от макросов отличить не можешь

http://playingwithpointers.com/archives/615
>Haskell too has macros. The subsystem is called Template Haskell. It is a Lisp-like AST generation framework that comes as a GHC extension

>Я уже обосновал.

Нет, не обосновал. "Нельзя, потому что четкие пацаны так сказали" за обоснование не считается.

>Это по твоей логике

Нет, это по твоей логике от реализаций r6rs не требуется наличия всего, что входит в стандартную библиотеку r6rs.

>Не съезжай с темы! Давай обосновывай чем твой подход лучше!

yyy: эту задачу можно решить вот так
xxx: надо не так, а эдак. Твой подход хреновый
yyy: обоснуй
xxx <пальцы веером, хер наружу>: нет это ты должен обосновать, почему я неправ! Потому что я здесь крутой пацан и всегда прав, пока не доказано обратное!

Я не говорил, что мой подход лучше или хуже, это ты говорил, что он хуже. Ты и отвечай за свои слова, а я буду отвечать за свои.

>Тебе доки читать влом?

С чего ты взял?

>(case type...
>Даже такое решение быстрее твоего галиматья.

А если там не два, а миллион типов? Лучше уж тогда ассоциативный массив типов с предикатами создать и с ним потом работать - накладные расходы на этот массив. Не факт, что быстрее.

И да, я тормознул конечно же (когда сказал, что без eval ee не решить), признаю.

misha

Moderators


Статус

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

#5238   2011-12-05 01:04 GMT+3 часа(ов)      
>http://playingwithpointers.com/archives/615

Дальше шаблонов они так и не ушли. Странная картина получается, т.е. "нашим" четким пацанам ты не веришь, а перед какими-то знатоками уши развесил! А ты случаем не шпиён?

>Нет, не обосновал. "Нельзя, потому что четкие пацаны так сказали" за обоснование не считается.

Если тебя не удовлетворили причины указанные мной ранее, так укажу тебе на тот факт, что ты используешь нестандартный eval. По стандарту (eval expr environment), т.е. необходимо передать environment, причем environment может быть либо r5rs, либо r6rs. Поэтому некоторые реализации вообще не поддерживают создание нестандартного окружения. Другими словами, ты сможешь воспользоваться только базовыми функциями, а не своими определениями.

>>Тебе доки читать влом?
>С чего ты взял?

Так ведь рассуждаешь по-ламерски.

>А если там не два, а миллион типов?

Не нужно впадать в крайности Хотя всегда можно воспользоваться хештаблицей.

joba

Members


Статус

157 сообщений

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

#5240   2011-12-05 07:14 GMT+3 часа(ов)      
>Дальше шаблонов они так и не ушли.

Что ты понимаешь под "шаблонами"?

>Странная картина получается, т.е. "нашим" четким пацанам ты не веришь, а перед какими-то знатоками уши развесил!

Я никому не верю, ни "нашим", ни "ихним".

>А ты случаем не шпиён?

А ты случаем не Евгений Ваганович, Петросян который?

>ты используешь нестандартный eval.

Это уже детали, суть не в этом. Мне просто лень было полностью писать вызов с окружением. Можешь считать, что там стандартный eval с переданным ему каким-то окружением.

>причем environment может быть либо r5rs, либо r6rs.
>ты сможешь воспользоваться только базовыми функциями, а не своими определениями.

Ты гонишь (сам же доки и не читаешь).
Цитата
(environment import-spec ...) procedure

Import-spec must be a datum representing an <import spec> (see report section on “Library form”). The environment procedure returns an environment corresponding to import-spec.


Например,
> (library (l) (export t) (import (rnrs)) (define t 5))
> (eval 't (environment '(l)))
5


>Так ведь рассуждаешь по-ламерски.

Обоснуй.

>Не нужно впадать в крайности

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

>Хотя всегда можно воспользоваться хештаблицей.

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

misha

Moderators


Статус

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

#5241   2011-12-05 13:54 GMT+3 часа(ов)      
>Это уже детали, суть не в этом. Мне просто лень было полностью писать вызов с окружением. Можешь считать, что там стандартный eval с переданным ему каким-то окружением.

Не ври! Ты об этом только вчера узнал.


>Ты гонишь (сам же доки и не читаешь).

Молодец! Ну наконец таки ты в r6rs залез. А теперь посмотри требования r5rs.
Кстати, как ты предлагаешь его использовать в данной задаче? И как ты справишься с лексическими переменными? Будешь снова велосипедить? Короче, ты либо баран, либо бредишь.
И еще, услышу хоть одно матерное слово, то удалю твой комментарий без разговоров.

>Обоснуй.

Вот и обоснуй мне, что ты не баран. Тебе ведь уже который раз объясняют, что это бред.

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

Ну это же не всегда возможно. Обоснуй, почему ты до сих пор держишься за свой велосипед? Кстати, environment на деле та же хештаблица.

Kergan

Members


Статус

300 сообщений

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

#5242   2011-12-05 15:43 GMT+3 часа(ов)      
Цитата
Без eval ее не решить. И точка.

Ее и с eval не решить, т.к. предикат проверки на тип может:
1. оказаться локальным (и как энвиронмент не настраивай - евал его не увидит)
2. не оканчиваться на "?" (тот факт, что предикаты в схеме оканчиваются на "?" - это не строгое требование синтаксиса).

Kergan

Members


Статус

300 сообщений

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

#5243   2011-12-05 15:45 GMT+3 часа(ов)      
> >Haskell too has macros. The subsystem is called Template Haskell. It is a Lisp-like AST generation framework that comes as a GHC extension

А на заборе "х*й" написано. От лиспомакросов а хаскитемлпейтах только квазицитирование, да и то криво реализованное.

> Нет, не обосновал. "Нельзя, потому что четкие пацаны так сказали" за обоснование не считается.

Нельзя (то есть, конечно, можно, но не следует злоупотреблять), потому что:
1. медленно
2. ненадежно

> Не факт, что быстрее.

Факт

joba

Members


Статус

157 сообщений

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

#5246   2011-12-05 21:41 GMT+3 часа(ов)      
>Ты об этом только вчера узнал.

misha демонстрирует телепатические способности, спишите видеть!

>Ну наконец таки ты в r6rs залез.

Браво. А можешь еще угадать, что я сегодня ел на завтрак?

>А теперь посмотри требования r5rs.

scheme - это не только r5rs.

>Кстати, как ты предлагаешь его использовать в данной задаче?

Так же как и ты свою свою хеш-таблицу.

>И как ты справишься с лексическими переменными?

Так же как и ты с ними "справишься" со своим case или хеш-таблицей.

>Короче, ты либо баран, либо бредишь.
>И еще, услышу хоть одно матерное слово, то удалю твой комментарий без разговоров.

Удали лучше себя.

>Тебе ведь уже который раз объясняют, что это бред.

Ты о себе уже во множественном числе стал говорить. С тобой все в порядке?

>Кстати, environment на деле та же хештаблица.

Ага, только с твоим подходом их будет две (само окружение имен предикатов с их значениями, плюс твоя хеш-таблица, имен типов с соответствующими им предикатами), а с моим - только один environment.

joba

Members


Статус

157 сообщений

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

#5247   2011-12-05 21:50 GMT+3 часа(ов)      
>Нельзя (то есть, конечно, можно, но не следует злоупотреблять), потому что:
>1. медленно
>2. ненадежно

Cм. Сообщение #5196
>Причем не вообще, а "в данном случае".

>Факт

Тесты в студию.

Kergan

Members


Статус

300 сообщений

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

#5248   2011-12-05 22:26 GMT+3 часа(ов)      
> Cм. Сообщение #5196

Ну посмотрел. И?

> Тесты в студию.

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

Kergan

Members


Статус

300 сообщений

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

#5249   2011-12-05 22:30 GMT+3 часа(ов)      
> Так же как и ты с ними "справишься" со своим case или хеш-таблицей.

Ты забываешь тот факт, что енвиронмент не содержит локальных переменных и заставить его их содержать ты никак не сможешь. В отличии от своего хеша, в который ты можешь положить что хочешь и когда хочешь (а если есть динамические переменные - ничего и делать не надо, все будет искаробки).

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

misha

Moderators


Статус

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

#5252   2011-12-06 01:14 GMT+3 часа(ов)      
>misha демонстрирует телепатические способности, спишите видеть!
>Браво. А можешь еще угадать, что я сегодня ел на завтрак?
>Удали лучше себя.
>Ты о себе уже во множественном числе стал говорить. С тобой все в порядке?

Обоснуй, а иначе я закрою тему из-за твоей невменяемости.

>Так же как и ты свою свою хеш-таблицу.
>Так же как и ты с ними "справишься" со своим case или хеш-таблицей.
>Ага, только с твоим подходом их будет две (само окружение имен предикатов с их значениями, плюс твоя хеш-таблица, имен типов с соответствующими им предикатами), а с моим - только один environment.

Вот ты и подтвердил, что только вчера залез в стандарт, и ничегошеньки не знаешь про eval и environment.

joba

Members


Статус

157 сообщений

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

#5254   2011-12-06 03:54 GMT+3 часа(ов)      
>Обоснуй, а иначе я закрою тему из-за твоей невменяемости.

Что конкретно тебе обосновать? Например, "объясняют" - это множественное число. Ты будешь с этим спорить?

>Вот ты и подтвердил, что только вчера залез в стандарт, и ничегошеньки не знаешь про eval и environment.

Поясни, как ты сделал такой вывод.

А вообще, ты уже слил. Тема нашего разговора была не обо мне, и не о том, что я знаю или не знаю.

misha

Moderators


Статус

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

#5256   2011-12-06 06:40 GMT+3 часа(ов)      
>Например, "объясняют" - это множественное число. Ты будешь с этим спорить?

Ага, значит Kergan и четкие пацаны уже не приделах.

>Поясни, как ты сделал такой вывод.

Вот твои пустые утверждения:
1) Так же как и ты свою свою хеш-таблицу.
2) Так же как и ты с ними "справишься" со своим case или хеш-таблицей.
3) Ага, только с твоим подходом их будет две (само окружение имен предикатов с их значениями, плюс твоя хеш-таблица, имен типов с соответствующими им предикатами), а с моим - только один environment.

(let ([s (current-seconds)])
(eval 's environment))

1,2) Засунь в environment переменную s (это возможно только для константы).
3) Считать разучился? Тебе ведь необходимо создать дополнительный environment.
И ответь на требование Kergan-а: "и еще ты так и не сказал что будет, когда предикат не определяется по имени типа.".

>А вообще, ты уже слил. Тема нашего разговора была не обо мне, и не о том, что я знаю или не знаю.

Когда ты меня оскорблял, ты помнил о теме нашего разговора?

отредактировал(а) misha: 2011-12-06 16:48 GMT+3 часа(ов)


Онлайн :

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




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