Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 13:19
Оценка:
В Лиспе - атомы, кажется, выглядят так: `atom
В Эрланге - так: any_string_starting_from_lowercase
В Руби - так:  :atom
В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];


Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?
beep
Re: Какой бы синтаксис выбрать для атомов?
От: Cyberax Марс  
Дата: 10.02.09 13:26
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?

Может использовать префикс "^"? Вроде даже красиво: "^atom".
Sapienti sat!
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 13:30
Оценка:
C>Может использовать префикс "^"? Вроде даже красиво: "^atom".

Ага, как в универе, "пи-с-ду[ж|ш]кой", "пи-с-домиком". Не знаю, совпадает с ксором, но вроде лексер получится убедить,
что это разные конструкции. Есть еще вариант с баксом и решеткой, правда решетку я под комменты взял, но можно переиграть.

Но что-то ничего не нравится. Можно заставлять явно аннотировать. Можно использовать вики-нотацию — т.е. слово в вики-нотации —
это автоматически атом. Меня все эти варианты раздражают, вот и решил заслушать Vox Dei, так сказать.
Re: Какой бы синтаксис выбрать для атомов?
От: x-code  
Дата: 10.02.09 13:46
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>В Эрланге - так: any_string_starting_from_lowercase
dmz>В Руби - так:  :atom
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>


dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Если я правильно понимаю — атом во всех этих языках это что-то вроде именованной константы или элемента перечисления?
Если так — из предложенных вариантов менее раздражающий `atom (символ ` воспринимается не как операция)
Хотя я привык к enum'ам
Re: Какой бы синтаксис выбрать для атомов?
От: palm mute  
Дата: 10.02.09 13:56
Оценка:
Здравствуйте, dmz, Вы писали:

А для атомов точно нужен синтаксис, atom('foo') не пойдет?

dmz>
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>

Придерусь, полиморфные варианты — это больше, чем атомы.
Re: Какой бы синтаксис выбрать для атомов?
От: CrystaX Россия https://crystax.me/
Дата: 10.02.09 14:06
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Меня больше всего эрланговский стиль устраивает. Хотя если попробовать обосновать — вряд ли смогу привести достаточно разумные доводы.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 14:09
Оценка:
PM>А для атомов точно нужен синтаксис, atom('foo') не пойдет?

Ну как-то вообще громоздко.

if x == atom('AAA') then ... ;


PM>Придерусь, полиморфные варианты — это больше, чем атомы.


Ну, больше конечно. Но других атомов в окамле, насколько мне известно, нет. Так что в моем
случае можно считать их атомами.
Re: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:09
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>В Эрланге - так: any_string_starting_from_lowercase
dmz>В Руби - так:  :atom
dmz>В Окамле - как-то так: type atoms of [`Atom1, `Atom2, `Atom3];
dmz>


dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 14:17
Оценка:
M>Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом

Ну эрланг для них слишком много требует, а вот возьмем руби. Существенно, что именно двоеточие перед знаком атома? Или неважно?
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Cyberax Марс  
Дата: 10.02.09 14:17
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Ага, как в универе, "пи-с-ду[ж|ш]кой", "пи-с-домиком". Не знаю, совпадает с ксором, но вроде лексер получится убедить,

dmz>что это разные конструкции. Есть еще вариант с баксом и решеткой, правда решетку я под комменты взял, но можно переиграть.
xor можно и словом записывать, не такая уж и частовстречающаяся операция.

В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...
Sapienti sat!
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:35
Оценка:
M>>Эрланг или Руби. Но все зависит не только от синтаксиса атомов, но и от синтаксиса языка в целом

dmz>Ну эрланг для них слишком много требует,


привыкаешь

dmz> а вот возьмем руби. Существенно, что именно двоеточие перед знаком атома? Или неважно?


нужен простой символ, который просто печатать. Именно потому "крышка"(^) не подходит, имхо. Двоеточие лучше.

Если считать, что код в основном набирается на латинице, то tick(`) тоже неплохо, но tick — достаточно мелкий символ. Можно апостроф/одинарную кавычку ('), она более заметна, но возникают проблемы, если в языке используются одинарные кавычки для строк/символов

Есть вариант с @. Возражения те же, что с крышкой, хотя, имхо, @ набирать удобнее.

Если в языке не используются конструкции с точкой, можно использовать точку.

Ни в коем случае не вертикальную черту(|). Ее неудобно набирать и на разных клавиатурах она находится в разных местах.

Как вариант — знак вопроса (в Эрланге им отмечаются define-ы):
-define(HELLO, "hello, world").

start() ->
    io:format("~p~n", [?HELLO]);


Большинство других символов отпадают из-з их "ambiguity" (это скобки, +, -, =, ", %)


Я бы выбрал или двоеточие или вопросительный знак. Но если в языке есть тернарный оператор (? или можно использовать любые символы в названиях переменных (item.exists?), то я бы еще сильно подумал
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re[4]: Какой бы синтаксис выбрать для атомов?
От: Mamut Швеция http://dmitriid.com
Дата: 10.02.09 14:35
Оценка:
C>В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...

плюс перекрытие области видимости
... << RSDN@Home 1.2.0 alpha 4 rev. 1136>>


dmitriid.comGitHubLinkedIn
Re: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 10.02.09 15:09
Оценка:
Здравствуйте, dmz, Вы писали:
dmz>
dmz>В Лиспе - атомы, кажется, выглядят так: `atom
dmz>


Не вдаваясь в суть, можно и `atom, и 'atom.
Вообще, лучше не запаривайтесь отдельно с атомами, а сделайте нормальное цитирование.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:28
Оценка:
MC>Вообще, лучше не запаривайтесь отдельно с атомами, а сделайте нормальное цитирование.

1) Васт ис "нормальное цитирование" и чем оно отличается от ненормального. В гугл чур не посылать, не я эту тему поднял
2) Запары с атомами я не вижу, пока мы тут обсуждаем, я их уже сделал. Собственно, они понадобились, поскольку
ничего глобального в языке пока нет, а вот какого-то рода константы нужны.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:33
Оценка: +1
M>нужен простой символ, который просто печатать. Именно потому "крышка"(^) не подходит, имхо. Двоеточие лучше.

Ну в общем, я не очень понимаю разницу между shitf-tilda, shift-6 или shift-2, но решил, что во избежание лучше взять
кракозябру, которая еще нигде не используется. Таким образом пространство сужается до

@ $ ? `


, и, в общем, неважно что это будет, так как всегда можно поменять одно на другое.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 15:37
Оценка:
C>В идеале лучше всего было бы атомы по контексту определять, без их синтаксического выделения. Только вот можно ли так сделать...

Можно, но внесет изрядную неочевидность.

if moo == foobar then puts("FOOBAR"); # тут определился атом

...
# а вот тут он втихую перекрылся, так как в одной области видимости 
# вполне можно иметь одинаковые идентификаторы, но при этом один будет скрывать 
# в порядке обхода AST, что будет иногда приводить к странным ошибкам
def foobar() 
{
...
}


А если мы объявим функцию foobar раньше, чем одноименный атом, то стрельнет ошибка типов. В общем,
не стоит оно ни проблем при использовании, ни проблем при реализации.
Re: Какой бы синтаксис выбрать для атомов?
От: FR  
Дата: 10.02.09 15:48
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Я за кракозябру, это уже вполне привычно и узнаваемо для знакомых с функциональщиной.
Re: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 10.02.09 16:25
Оценка: +1
dmz пишет:
> В Лиспе — атомы, кажется, выглядят так: `atom
> В Эрланге — так: any_string_starting_from_lowercase
> В Руби — так: :atom
> В Окамле — как-то так: type atoms of [`Atom1, `Atom2, `Atom3];

Вы всё-таки про атомы, или про символы ?
Атом — это всё, что не список, а элемент списка (или последовательности).
Т.е. символы и константы разных типов.

> Какой подход для вас наименее раздражающий? Меня тут все раздражает — в

> лиспе кракозябра,

В лиспе `atom — квотированный символ. И то не так, а так: 'atom.
А просто символ — просто atom.

В прологе, кстати, то же самое, но только в нижнем регистре.
Posted via RSDN NNTP Server 2.1 beta
Re: Какой бы синтаксис выбрать для атомов?
От: c-smile Канада http://terrainformatica.com
Дата: 10.02.09 17:27
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий?


А какая грамматика/синтаксис лежит в основе твоего языка?

У меня (в tiscript) например грамматика C derived (JS).
Поэтому символы (формально: символ есть perfect hash values) это
nmtokens начинающиеся c '#'.

Т.е.
this.one = 1; эквивалентен
this[#one] = 1;


Что близко к определению ID в CSS (тоже С derived grammar).
CSS родственная технология tiscript поэтому близость важна.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 10.02.09 17:50
Оценка: 1 (1)
CS>А какая грамматика/синтаксис лежит в основе твоего языка?

Питонолуа:

def parse(s)
{
    local i = 0;
    local end = strlen(s);
    local e = [];
    while i < end
    {
        if strnth(s, i) == ',' 
        then {
            local ss = strsub(s, i+1, 2);
            if streq(ss, "EE") then e = ss :: e;
            elif streq(ss, "DD") then e = ss :: e;
            elif streq(ss, "FF") then e = ss :: e;
        }
        i = i + 1;
    }
    ret e;
}


def main()
{
    local l = [];
    l = parse("AAA,BB,CC,DD,EE,FF#");
    while !nil(l) #когда нибудь тут будет foreach
    {
        putsn(head(l));
        l = tail(l);
    }
    debug_dump_mem();
}
Re[3]: Какой бы синтаксис выбрать для атомов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.02.09 04:46
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Ну, больше конечно. Но других атомов в окамле, насколько мне известно, нет. Так что в моем

dmz>случае можно считать их атомами.

А зачем статически-типизированному языку атомы?

Я встречал атомы только в динамике. И то не везде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Какой бы синтаксис выбрать для атомов?
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.02.09 04:50
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>1) Васт ис "нормальное цитирование" и чем оно отличается от ненормального. В гугл чур не посылать, не я эту тему поднял

dmz>2) Запары с атомами я не вижу, пока мы тут обсуждаем, я их уже сделал. Собственно, они понадобились, поскольку
dmz>ничего глобального в языке пока нет, а вот какого-то рода константы нужны.

Константы и атомы — это две большие разницы (с).

Зачем тебе вообще атомы? И что ты вообще пытаешься сделать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 11.02.09 06:17
Оценка:
VD>Константы и атомы — это две большие разницы (с).

Что бы не вдаваться в ненужные подробности, будем понимать под ними тоже, что под ними понимают в эрланге и руби.

VD>Зачем тебе вообще атомы?

Надо. Например, констант нет (и теперь наверное и не будет).

VD>И что ты вообще пытаешься сделать?


Я не пытаюсь, я уже сделал. Язык скриптовый. Со сборкой мусора и статической типизацией. И выводом типов.
Для микроконтроллеров с 2 — 5 Kb RAM.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 11.02.09 06:29
Оценка:
VD>Зачем тебе вообще атомы?

Удобно. Структур нет, объектов нет (и лень пока делать, мороки много). Надо вот распарсить какую-нибудь сроку, и сохранить до
поры результаты в каком-то структурированном виде.

def parse_nmea(s)
{
    result = [];
    while ... {
      if    ... then result = (`Longitude, parse_longitude(s, i) :: result;
      elif  ... then result = (`Latitude, parse_latitude(s, i)   :: result;
      elif  ... then result  = (`Quality, parse_quality(s, i)    :: result;
      elif  ... then result = (`Satellites, parse_satellites(s, i) :: result;
    }
   ret result;
}
Re[4]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 11.02.09 06:41
Оценка:
VladD2 пишет:

> А зачем статически-типизированному языку атомы?


Иметь быстро сравниваемые и идентифицируемые строки.

>

> Я встречал атомы только в динамике. И то не везде.

Даже в яве есть.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 11.02.09 06:43
Оценка:
MZ>Иметь быстро сравниваемые и идентифицируемые строки.

Ну даже не то, что бы строки. Способ идентифицировать что-либо. Строки — очень дорогая штука,
я думал что я ими одними обойдусь, но накладно. А атом — вполне влезет в машинное слово.
Re[5]: [Offtopic]
От: yumi  
Дата: 11.02.09 09:10
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>def parse_nmea(s)
dmz>{
dmz>    result = [];
dmz>    while ... {
dmz>      if    ... then result = (`Longitude, parse_longitude(s, i) :: result;
dmz>      elif  ... then result = (`Latitude, parse_latitude(s, i)   :: result;
dmz>      elif  ... then result  = (`Quality, parse_quality(s, i)    :: result;
dmz>      elif  ... then result = (`Satellites, parse_satellites(s, i) :: result;
dmz>    }
dmz>   ret result;
dmz>}
dmz>


Ой, знакомое слово увидел, ты тоже в морской навигации? Я правда сейчас уже в другой области. У нас тоже был свой скриптовый язык, но совсем своебразный, для связи софта с железом. В основном для трансляции софтовых команд в железячные. Все остальное было old plain C. А зачем вам нужен скриптовый язык, точнее для каких задач? Какие преимущества?
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re[6]: [Offtopic]
От: dmz Россия  
Дата: 11.02.09 09:31
Оценка:
Y>Ой, знакомое слово увидел, ты тоже в морской навигации? Я правда сейчас уже в другой области. У нас тоже был свой скриптовый язык, но совсем своебразный, для связи софта с железом. В основном для трансляции софтовых команд в железячные. Все остальное было old plain C. А зачем вам нужен скриптовый язык, точнее для каких задач? Какие преимущества?

1) Грузить скрипты динамически, по GPRS или SMS
2) Менять поведение в зависимости от обстоятельств (профиля). Как для разных типов трекеров, так и для одинаковых трекеров в разных ситуациях.

Ядро тоже на си, там виртуальная машина и FreeRTOS (нужность последней пока под вопросом, но пока не мешает во всяком случане).
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 11.02.09 09:42
Оценка:
Здравствуйте, dmz, Вы писали:
dmz>Питонолуа:

А макросы там есть? Если есть/будут — за атом можно взять цитированный идентификатор.
Re[3]: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 11.02.09 09:44
Оценка:
Здравствуйте, dmz, Вы писали:
dmz>1) Васт ис "нормальное цитирование" и чем оно отличается от ненормального.

Это которое позволяет кодом оперировать как данными — зацитировал кусок кода — имеешь структуру данных.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: dmz Россия  
Дата: 11.02.09 09:47
Оценка:
MC>А макросы там есть? Если есть/будут — за атом можно взять цитированный идентификатор.

В предке (какбы-форте) были, наверное и тут будут когда-нибудь. Но в общем, атомы нужны были к сегодня, так что
пока сделал просто и тупо.
Re: Какой бы синтаксис выбрать для атомов?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.02.09 21:20
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>В Эрланге — так: any_string_starting_from_lowercase


В Erlang атом может состоять из любых символов, но описанный Вами — случай рекомендованный для применения. Остальные надо заключать в одинарные кавычки. Например:

(t@segfault.kiev.ua)6> is_atom('AAA').
true
(t@segfault.kiev.ua)7> is_atom('\001').
true
(t@segfault.kiev.ua)8> is_atom('').
true


В ряде интерфейсов такие "необычные" атомы явно используются: например, '$1', '$2'... в match specs, или '$gen_call' в специальных сообщениях для gen_server и аналогов.

(Это не ответ на Ваш вопрос, просто замечание по ходу.)

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы. Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Я вообще сомневаюсь, что тут может быть какое-то общее решение. Символов мало, и выбор каждого из них даст конфликт с чем-то, а ограничение синтаксиса кому-то помешает... так что тут выбор скорее эстетический, чем по какому-то ещё принципу: выбор должен минимально мешать синтаксису языка.
The God is real, unless declared integer.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: DemAS http://demas.me
Дата: 13.02.09 09:32
Оценка:
"Mamut" <9088@users.rsdn.ru> writes:

> Если считать, что код в основном набирается на латинице, то tick(`) тоже

> неплохо,

` — непривычен для windows пользователей. Когда я перешел на linux и
впервые столкнулся с `, набивая команду из книжки, несколько часов убил
на то, чтобы понять, почему команда не работает. А не работала она потому,
что я набирал ' и для меня, как для windows пользователя они выглядели идентично.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Какой бы синтаксис выбрать для атомов?
От: Гест Украина https://zverok.github.io
Дата: 13.02.09 16:50
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, dmz, Вы писали:


dmz>>Какой подход для вас наименее раздражающий?


CS>А какая грамматика/синтаксис лежит в основе твоего языка?


CS>У меня (в tiscript) например грамматика C derived (JS).

CS>Поэтому символы (формально: символ есть perfect hash values) это
CS>nmtokens начинающиеся c '#'.

CS>Т.е.

CS>
CS>this.one = 1; эквивалентен
CS>this[#one] = 1;
CS>


CS>Что близко к определению ID в CSS (тоже С derived grammar).

CS>CSS родственная технология tiscript поэтому близость важна.

Для «скриптового языка в принципе» не очень комильфо — есть привычное Linux-соглашение для скриптов, что # всегда должен быть комментарием, чтобы в первой строке можно было написать:

#!bin/tiscript
Re[5]: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 13.02.09 17:25
Оценка:
Здравствуйте, DemAS, Вы писали:
DAS>что я набирал ' и для меня, как для windows пользователя они выглядели идентично.

Вообще, в некоторых странах принято одинарные кавычки использовать `вот так' (обратите, например, внимание на сообщения от ghci), так что возможно, что эта специфика тех стран, где одинарные кавычки не в ходу.
Re[4]: Какой бы синтаксис выбрать для атомов?
От: DemAS http://demas.me
Дата: 13.02.09 18:43
Оценка:
"VladD2" <73@users.rsdn.ru> writes:

> Константы и атомы — это две большие разницы (с).


А в чем между ними разница? Если долго объяснять — буду благодарен за ссылку.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 13.02.09 19:25
Оценка:
DemAS пишет:

> А в чем между ними разница? Если долго объяснять — буду благодарен за

> ссылку.

Атом может быть переменной.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Какой бы синтаксис выбрать для атомов?
От: z00n  
Дата: 13.02.09 20:37
Оценка:
Г>Для «скриптового языка в принципе» не очень комильфо — есть привычное Linux-соглашение для скриптов, что # всегда должен быть комментарием, чтобы в первой строке можно было написать:

Г>
Г>#!bin/tiscript
Г>


Это не проблема, например в луа первая строчка просто пропускается если начинается с '#'.

The first line in the file is ignored if it starts with a #.


Нечто подобное предусмотрено во всех скриптовых языках, в которых '#' не означает начало комментария.
Re[6]: Какой бы синтаксис выбрать для атомов?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.02.09 11:14
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>DemAS пишет:


>> А в чем между ними разница? Если долго объяснять — буду благодарен за

>> ссылку.

MZ>Атом может быть переменной.


Переведите, пожалуйста.
The God is real, unless declared integer.
Re[7]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 14.02.09 13:32
Оценка:
netch80 пишет:

>> > А в чем между ними разница? Если долго объяснять — буду благодарен за

>> > ссылку.
>
> MZ>Атом может быть переменной.

Так это в каком языке смотря.

(list a b c d) — a b c d — переменные. list — кстати, функция,
а тоже атом.

(list 'a 'b :c :d) — a b c d — константы
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Какой бы синтаксис выбрать для атомов?
От: Mr.Cat  
Дата: 14.02.09 16:00
Оценка:
Здравствуйте, netch80, Вы писали:
N>Переведите, пожалуйста.

Полагаю, имеется в виду, что атом может быть значением переменной.
Re[8]: Какой бы синтаксис выбрать для атомов?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.02.09 17:18
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, netch80, Вы писали:

N>>Переведите, пожалуйста.

MC>Полагаю, имеется в виду, что атом может быть значением переменной.


Ну так и число может быть значением переменной... думаю, тут что-то иное.
The God is real, unless declared integer.
Re[2]: Какой бы синтаксис выбрать для атомов?
От: vdimas Россия  
Дата: 17.02.09 10:44
Оценка:
Здравствуйте, x-code, Вы писали:


XC>Если я правильно понимаю — атом во всех этих языках это что-то вроде именованной константы или элемента перечисления?


Это то, что не вычисляется, а представляется самим собой.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[9]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 17.02.09 15:22
Оценка:
netch80 пишет:

> Ну так и число может быть значением переменной... думаю, тут что-то иное.

Так число — тоже атом. Ну, конечно в некоторых языках.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Что такое атомы?
От: x-code  
Дата: 17.02.09 17:16
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Это то, что не вычисляется, а представляется самим собой.


Интересно... я здесь первый раз узнал об атомах Википедия молчит, даже английская (или они там по-другому называются? хотя вряд-ли...)
Можно еще один вопрос.
Если, допустим, ` — символ атома, то получается, что `(x+y) — тоже атом?
Практический вопрос — как такой атом можно на практике использовать в некотором языке программирования, поддерживающем ФП?
Re[4]: Что такое атомы?
От: vdimas Россия  
Дата: 17.02.09 17:46
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Если, допустим, ` — символ атома, то получается, что `(x+y) — тоже атом?


Да, т.е. это выражение не вычисляется, а запоминается в исходном виде.

XC>Практический вопрос — как такой атом можно на практике использовать в некотором языке программирования, поддерживающем ФП?


Если язык компиллируемый, то атом — это константа или любое значение любого типа, т.е. на практике — бесполезен для таких языков, ибо в момент компиляции известно, что есть выражение, а что — значение.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: Что такое атомы?
От: z00n  
Дата: 17.02.09 21:59
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Интересно... я здесь первый раз узнал об атомах Википедия молчит, даже английская (или они там по-другому называются? хотя вряд-ли...)

Там просто нет отдельной статьи:
http://en.wikipedia.org/wiki/Lisp_programming_language#Atoms
http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/Lisp-Atoms.html
Хотя топикстартер имел в виду скорее атомы из пролога(или Erlang), которые аналог лисповых symbols(которые тоже атомы).
http://en.wikipedia.org/wiki/Prolog
http://erlang.org/doc/reference_manual/data_types.html
Re: Какой бы синтаксис выбрать для атомов?
От: Кодт Россия  
Дата: 19.02.09 17:41
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>Какой подход для вас наименее раздражающий? Меня тут все раздражает — в лиспе кракозябра, в руби — двоеточие, которое в других языках используется совсем по-другому, так что я долго не мог въехать, что это в руби вообще такое. В Окамле — кракозябра, в Эрланге — то, что идентификаторы должны быть с заглавной буквы.


В Эрланге и Прологе атомы — с маленькой буквы. С большой буквы — имена переменных. Имена функций являются атомами, другое дело, что не каждому атому соответствует функция

Если это вписывается в твою идеологию, то сделай как в Эрланге, и тогда придётся как-то обособлять имена переменных (начинать с Другого регистра, предварять знаком $ и т.п.)
Кстати, можно считать, что $ — это операция получения переменной, ассоциированной с атомом.
$x = 123;
$y = x;
$$y += 1; # получилось 124


Если же атомы должны быть отдельными сущностями, то обособлять придётся их.

dmz> Так что в итоге я не знаю, как лучше сделать. Есть соображения, как лучше?


Предлагаю использовать @ — ATom

@hello — атом, связанный с литералом "hello"
atom("hello") == @hello — атом, связанный со строкой-аргументом.
str(@hello) == "hello" — строка, связанная с атомом
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[8]: Какой бы синтаксис выбрать для атомов?
От: vdimas Россия  
Дата: 19.02.09 23:26
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Так это в каком языке смотря.


MZ>(list a b c d) — a b c d — переменные. list — кстати, функция,

MZ>а тоже атом.

переменная — не атом, хотя может иметь значение атома.
Re[10]: Какой бы синтаксис выбрать для атомов?
От: vdimas Россия  
Дата: 19.02.09 23:41
Оценка:
Здравствуйте, MasterZiv, Вы писали:

>> Ну так и число может быть значением переменной... думаю, тут что-то иное.

MZ>Так число — тоже атом. Ну, конечно в некоторых языках.

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

Для чисел в Лисп это тоже относилось, т.к. чтобы не создавать каждый раз динамически числа в памяти, некоторый их диапазон создавался и кешировался при старте системы, а затем, при парсинге, если число попадало в кешированный диапазон, то бралась ссылка на уже имеющийся готовый объект, вместо создания нового. От того, в некотором диапазоне числа были автоматически атомами.
Re[10]: Какой бы синтаксис выбрать для атомов?
От: vdimas Россия  
Дата: 19.02.09 23:47
Оценка:
Здравствуйте, MasterZiv, Вы писали:

>> Ну так и число может быть значением переменной... думаю, тут что-то иное.

MZ>Так число — тоже атом. Ну, конечно в некоторых языках.

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

Для чисел в Лисп это тоже относилось, т.к. чтобы не создавать каждый раз динамически числа в памяти, некоторый их диапазон создавался и кешировался при старте системы (0..255 во многих системах), а затем, при парсинге или вычислениях, если число попадало в кешированный диапазон, то бралась ссылка на уже имеющийся готовый объект, вместо создания нового. От того, в некотором диапазоне числа были автоматически атомами.
Re[9]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 22.02.09 09:39
Оценка:
vdimas пишет:

> переменная — не атом, хотя может иметь значение атома.

смотря где, в каком языке.
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Какой бы синтаксис выбрать для атомов?
От: MasterZiv СССР  
Дата: 22.02.09 09:43
Оценка:
vdimas пишет:

> Само понятие изначально возникло из-за требований уникальности ввиду

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

Господа, не путаем атомы и символы. Символ — частный случай атома.

> Для чисел в Лисп это тоже относилось, т.к. чтобы не создавать каждый раз

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

В лиспе всё, что не список — атом. Даже вектор ( #(a s d) ).

CL-USER> (atom 1234)
T
CL-USER> (setf asd 'asd)
ASD
CL-USER> (atom asd)
T
CL-USER> (atom #(a s d f))
T
CL-USER> (atom '(a s d f))
NIL
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Какой бы синтаксис выбрать для атомов?
От: vdimas Россия  
Дата: 24.02.09 11:21
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Господа, не путаем атомы и символы. Символ — частный случай атома.


Никто и не путает.
Речь о том, что значит понятие атом. Изначально атом — это был просто неделимый объект (да, всё что не список в Лиспе), но потом к нему прибавилась "окраска" уникальности, и использовался этот термин именно с этой окраской, напр. в API Windows. Откуда взялась эта окраска — сказал в пред. посте.
Еще одна окраска в том, что атомы — не вычисляются, а представляются самими собой. Напр., аргументы ф-ий, их тела, а так же глобальные и локальные переменные в Лиспе преставляли из себя объекты-списки (т.е. реализованы на тех же списках), которые вычислялись системой перед подачей в кач-ве аргументов ф-ий (apply), атомы — единственные не вычислялись.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.