LINUX.ORG.RU

Недоступность окружений.

 


0

2

Здравствуйте. Очередной нубский вопрос.

Почему в scheme нет доступа к переменным из какого либо скопа, даже глобального, и даже на «чтение». Мне кажется это довольно неудобно на практике. Например, банально, мы не можем определить, существует ли переменная. Связано ли данное ограничение с идеологией, scheme? Ее семантикой?

PS Интересует данный вопрос только в отношении r5rs и ниже. В r6rs и r7rs я пока не вникаю.

Ответ на: комментарий от monk

Но ведь, если переменной не существует, она упадет?

anonimous
() автор топика

Не думаю, что я правильно понял вопрос. Но зачем тебе доступ к происзвольному скопу? На то он и скоп, чтобы быть доступным только из определенного места.

И да, в толксы.

P.S. поддерживаю Васю

grouzen ★★
()
Ответ на: комментарий от grouzen

Да, неправильно понял. В схеме не доступен не только произвольный скоп, но даже глобальный. И он не доступен, не из какого места, переменные можно только вызвать, «пощупать» нельзя. И при чем тут толксы, если тема техническая?

anonimous
() автор топика
Ответ на: комментарий от anonimous

Действительно. Поэтому я и говорю, что теме место в толксах, с ее «техническими» терминами «пощупать» и «вызвать».

grouzen ★★
()

Почему в scheme нет доступа к переменным из какого либо скопа, даже глобального

слушай, открой SICP, там про это ЕМНИП три главы написано. А на лоре тебе скажут два слова:

ТЫ МУ*АК

ты точно этого хочешь?

emulek
()
Ответ на: комментарий от anonimous

ну про то, что ты спрашивал в первом посте. Это не баг, а фича. Это как если спросить: «почему в сишечке не осилили определить размер int'а в битах?».

Т.е. баг как раз в сишечке, и в подобных ЯП.

emulek
()
Ответ на: комментарий от emulek

Да ясно, что не баг, вот и хотелось узнать поподробней, чем это грозит для «чистой» семантики. Почему нельзя получить доступ хотя бы к глобальному и хотя бы на чтение? Там же нет try/catch. Как организовать обработку исключения обращения к неопределенной переменной например?

anonimous
() автор топика
Ответ на: комментарий от emulek

И какие три главы написано там, я так и не понял? Первые три главы там про чисто функциональную парадигму, Дальше про объекты и состояния, несколько глав. Я не видел там объяснения, может не понял чего, ты поясни.

anonimous
() автор топика
Последнее исправление: anonimous (всего исправлений: 1)
Ответ на: комментарий от grouzen

Тебе по теме то есть что сказать, терминолог хренов?

anonimous
() автор топика

Это, видать, связано с их идиотской гигиеной, но как конкоетно связано, не в курсах.

anonymous
()
Ответ на: комментарий от anonimous

Первые три главы там про чисто функциональную парадигму, Дальше про объекты и состояния, несколько глав. Я не видел там объяснения, может не понял чего, ты поясни.

м... Ну в двух словах, основная фича ФП == функция. Но функция не могла-бы юзаться как самостоятельная сущность, если-бы не обладала СВОИМ окружением.

Тут даже дело не в том, что это «невозможно», а в том, что в этом просто нет смысла. Часто это вправду деление на ноль, например в этом говнокоде: x-- - --x;, в ФП такой говнокод в принципе невозможен, ибо нет доступа к внутреннему контексту. Это всё позволяет писать более надёжный и устойчивый код.

emulek
()
Ответ на: комментарий от emulek

Но функция не могла-бы юзаться как самостоятельная сущность, если-бы не обладала СВОИМ окружением.

Если ты о функциях с состояниями, то как-раз не в кассу. Там такие функции как-раз юзаются в ООП и императивщине. А в первых главах, которые как раз про чистую функциональщину, понятие окружений даже не вводится еще. Так что не в кассу.

ибо нет доступа к внутреннему контексту

Ты говоришь про иммутабельность и замыкания. Но почему прочитать то нельзя?

anonimous
() автор топика
Ответ на: комментарий от anonimous

Ты говоришь про иммутабельность и замыкания. Но почему прочитать то нельзя?

Возьми и сделай чтобы можно было, в чем проблема то? /thread

grouzen ★★
()
Ответ на: комментарий от grouzen

Да я могу сделать. Можно вообще в свой скоп «самодельный» все копировать. Нахреначить кучу хешей под каждое замыкание. Вариантов тьма, это не проблема. Но когда ты, наконец, вопрос то осилишь, мля.

anonimous
() автор топика
Ответ на: комментарий от emulek

что в этом просто нет смысла

Я уже 10 раз написал, в чем смысл. Как ты обработаешь исключение обращения к неинициализированной переменной например?

anonimous
() автор топика
Ответ на: Не благодари от shamaz

Функцию напиши, а не эту синтетику. Как ты себе представляешь обработку переменной, которая не определена. Напомню, что вычисления у нас энергичные.

anonimous
() автор топика
Ответ на: комментарий от anonimous

В CL есть ещё есть boundp.

Как ты себе представляешь обработку переменной

Я написал

Функцию напиши, а не эту синтетику.

?

shamaz
()
Ответ на: комментарий от shamaz

Я о том, как ты сможешь реализовать проверку переменной, если не имеешь доступа к скопу. Ты к ней обращаешься, она - undefined. Прога падает. Дальше что?

anonimous
() автор топика
Последнее исправление: anonimous (всего исправлений: 1)
Ответ на: комментарий от shamaz

Ладно, давай забудем обиды. Я действительно нуб. Но почему ты не можешь объяснить по-человечески, как реализована твоя обработка. Если она реализована на уровне какого-то конкретного интерпретатора/компилятора, то это ничего не меняет.

anonimous
() автор топика
Ответ на: комментарий от anonimous

В CL ты смотришь значение переменной (ассоциируемой, не знаю, как правильно сказать, с некоторым символом). У символа есть так называемый property list, а также значение symbol-value и symbol-function. Значение этой переменной хранится в symbol-value, и если там некий маркер «переменная не связана», то сигнализируется условие unbound-variable, которое можно обработать с помощью системы условий и рестартов.

Как-то так. Может в подробностях я и неточно сказал, но для программиста суть одна - ловишь unbound-variable и обрабатываешь.

Для динамических переменный можно проверить связывание с помощью boundp

shamaz
()
Ответ на: комментарий от anonimous

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

shamaz
()
Ответ на: комментарий от shamaz

Ну а какое отношение это имеет к моему вопросу? В CL есть эта фича, в плюсах - та фича. Ты, я гляжу, резко стартанул, а топик не прочитал даже.

anonimous
() автор топика
Ответ на: комментарий от anonimous

Я же говорю, язык не важен. Почитай, как в scheme обрабатывают такой случай. Я же говорю, любой лисп никогда не падает.

shamaz
()
Ответ на: комментарий от shamaz

Да не о том речь, вообще. Может и обрбатывается где-то, я слышал, даже с помощью call/cc можно обработать. Но доступ к скопам может иметь массу других преимуществ. Плюс простота. Я подозреваю, что сама идеология современной схемы не позволяет лезть в скопы. Не знаю почему. Я где-то видел например, что в первой редакции sicp, использовалась имплементация, которая это позволяла. Сейчас все изменилось. Вот я и хочу узнать, с чем это связано.

anonimous
() автор топика

Связано ли данное ограничение с идеологией, scheme?
только в отношении r5rs

Да. Идеология: минимум мусора в стандарте. Это можно сделать библиотекой в конкретной реализации.

Ее семантикой?

Не мешает. Некоторым мешает, но им полноценные продолжения в принципе не нравятся.

ilammy ★★★
()
Ответ на: комментарий от ilammy

Огромное спасибо Вам. Первый адекватный ответ за сегодня.

anonimous
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.