Форум: "Потрепаться";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Вниз; not allowed before ELSE Найти похожие ветки
← →
Sha (2003-12-26 12:50) [40]MOA © (26.12.03 12:46) [38]
Не пойдет компияция.
← →
MOA (2003-12-26 12:53) [41]2Sha
А вы попробуйте, попробуйте. И в чём отличие от
if i > 2 then
if j < 3 then
k:=i+j //< без ;
else
k:=i-j;
← →
Sandman25 (2003-12-26 12:54) [42][38] MOA © (26.12.03 12:46)
[Error] Unit1.pas(30): ";" not allowed before "ELSE"
← →
Sha (2003-12-26 12:56) [43]MOA © (26.12.03 12:53) [41]
Версия Delphi?
← →
blackman (2003-12-26 12:58) [44]А все так хорошо начиналось :) С Semicolon :)
К стати помню, что приходилось ее перфорировать как ., потому, что не было на клавиатуре ;
Однако на каком устройстве уже не помню :)
Может кто вспомнит ?
А вообще-то лучше Algol60 в мире нет и не было языка :)
Вперед в прошлое!
← →
Юрий Зотов (2003-12-26 13:00) [45]> Sha © (26.12.03 12:28) [33]
> А Алгол - не обучающий?
Нет. Изначально, Алгол - это метаязык. Язык описания алгоритмов. Нечто вроде БНФ, только из несколько другой оперы. И задумывался он именно как средство накопления библиотек алгоритмов. Это уж потом с него написали компиляторы и он стал ПРАКТИЧЕСКИМ языком.
> Это плохо, это отвлекает от ГЛАВНОГО - ПРИВИТЯ ХОРОШЕГО СТИЛЯ.
Это ХОРОШО, потому что ГЛАВНАЯ часть ХОРОШЕГО стиля - это как раз ПОСТОЯННО думать, а не лепить символы на автопилоте и со скоростью хорошей машинистки. Кстати, все проблемы исчезают после пары недель упражнений, а вот привычка ДУМАТЬ - остается.
> Языки пишутся для людей
А еще они пишутся для РАЗНЫХ людей и с РАЗНЫМИ целями.
> Вместо того, чтобы потратить время с большей пользой, КАЖДЫЙ
> преподаватель ВЫНУЖДЕН втолковывать КАЖДОМУ обучаемому (с его
> начальными и неокреншими знаниями
И особенно хорош в этом плане замечательный язык C (впрочем, ладно, не о нем речь). Где ставить, а где не ставить точку с запятой, мне стало АБСОЛЮТНО понятно после прочтения всего лишь одного абзаца в простенькой книжке. Если же преподаватель не может втолковать это студентам, то... или такие студенты, или такой преподаватель.
> Есть неоднозначность в интерпретации кода, написанного другим
> программистом, если подобные конструкции языка сам никогда не
> используешь.
Если у музыканта возникают проблемы в понимании партитуры, написанной другим музыкантом, то... то он просто плохо знает нотную грамоту. И ничего более. Ноты здесь, честное слово, ни при чем.
> Иван Шихалев © (26.12.03 12:34) [34]
Совершенно верно. Точка с запятой НЕ является частью оператора.
← →
MOA (2003-12-26 13:04) [46]Блин! Точно. Вот это да! И почему это я на эти грабли не разу не наступил за всё это время?
Мои извинения всё честной компании. Виноват.
Будем думать, почему нельзя.
← →
blackman (2003-12-26 13:12) [47]>Алгол - это метаязык. Язык описания алгоритмов
Стало быть на всех остальных алгоритм не запишешь :)
http://osp.admin.tomsk.ru/cw/1999/45/38.htm
http://privatjc.chat.ru/algol/
← →
Nous Mellon (2003-12-26 13:17) [48]
> Угу. Предпоследнее HolyWar уходящего года
А вы уже последнее наметили? :)
← →
Ну вы поняли мужики (2003-12-26 13:19) [49]subj
а оно тебе надо?
← →
Sha (2003-12-26 13:24) [50]> Юрий Зотов © (26.12.03 13:00) [45]
> Алгол - это метаязык. Язык описания алгоритмов.
Вот-вот. Поэтому на нем удобно вести обучение написанию алгоритмов.
> Это ХОРОШО, потому что ГЛАВНАЯ часть ХОРОШЕГО стиля - это как раз ПОСТОЯННО думать.
Некоторым может не нравится постоянно думать, обходя каждый камень на пути. Гораздо лучше, когда все камни убраны с твоей дороги. Предпочитаю думать о ГЛАВНОМ :)
>> Языки пишутся для людей
>А еще они пишутся для РАЗНЫХ людей и с РАЗНЫМИ целями.
Тут я согласен. И в обучащем языке соломки могло бы быть и побольше.
> Где ставить, а где не ставить точку с запятой, мне стало
> АБСОЛЮТНО понятно после прочтения всего лишь одного абзаца в
> простенькой книжке. Если же преподаватель не может втолковать
> это студентам, то... или такие студенты, или такой преподаватель.
Так и всем нормальным людям тоже. Я о другом. Дети пользуются выключателем не задумываясь об электронах. Они узнают об этом позже. Почемы бы не перенести эту концепцию на язык?
> Если у музыканта возникают проблемы в понимании партитуры,
> написанной другим музыкантом, то... то он просто плохо знает
> нотную грамоту. И ничего более. Ноты здесь, честное слово, ни
> при чем.
Опять не об этом. Речь даже не сомнении, а о тени сомнения.
По хорошей программе взляд должен скользить как по детективу, она должна быть написана так, чтобы смысл доходил легко, без запинок. Ноты здесь действительно ни причем :) Но не каждый пианист всякую партитуру сбацает.
>Точка с запятой НЕ является частью оператора.
А "операторные скобки ОПЕРАТОРАМИ не являются". Очевидные истины не требуется повторять. Это может раздражать оппонента. Если бы я книгу писал, то думал бы над каждым словом. А здесь по контексту понятно, что имеется ввиду. Тем более Вам.
← →
Igorek (2003-12-26 13:42) [51]Помню как переходил с С++ на Паскаль. Матерился - через оператор. В С++ все очевидно и просто. А в гребаном Паскале то ставь, то не ставь ";". Потом привык. Даже некоторые плюсы нашел. Хотя все равно имхо Паскаль масдай. Так что все - дело привычки. А любой алгоритм как говорится можно на любом языке написать.
Кстати была у меня идея-фикс. Почему нельзя позволить программисту самому определять грамматику языка. Или хотя бы ее корректировать. Напр. не нравится begin end - пиши {}. И не макросом заменять, а где-то галочку в опциях поставить. Т.е. программист строит свою грамматику, в ней пишет, в ней и читает код коллег.
← →
ИдиотЪ (2003-12-26 13:49) [52]Igorek ©
можно, для этого есть предтрансляторы
← →
Digitman (2003-12-26 14:03) [53]
> Igorek © (26.12.03 13:42) [51]
> Почему нельзя позволить программисту самому определять грамматику
> языка. Или хотя бы ее корректировать
очевидно, по той же причине, что и непозволительно просто человеку (не программисту - просто индивидууму в социуме) взять за правило вместо
Я ИДУ В КИНОТЕАТР
говорить
Я , на..., ИДУ , на...,В КИНОТЕАТР , на...,
лишь по той причине, что "в ней пишет, в ней и читает"
← →
Думкин (2003-12-26 14:03) [54]
> [48] Nous Mellon © (26.12.03 13:17)
Нет, просто предпоследних- уже несколько. К тому же есть еще Рабочие дни 29,30 - найдется кто опять разведет войнушку и хихикать будет. Опыт. :))
← →
Sha (2003-12-26 14:05) [55]Всех с будущим и прошедшим праздником. Мы продолжаем праздновать :)
← →
Думкин (2003-12-26 14:09) [56]
> [51] Igorek © (26.12.03 13:42)
> Помню как переходил с С++ на Паскаль. Матерился - через
> оператор. В С++ все очевидно и просто. А в гребаном Паскале
> то ставь, то не ставь ";". Потом привык. Даже некоторые
> плюсы нашел. Хотя все равно имхо Паскаль масдай.
Нет, это LMD.
← →
Igorek (2003-12-26 14:47) [57]
> Думкин © (26.12.03 14:09) [56]
> Нет, это LMD.
Иной реакции я и не ожидал. :)))
Или ты имел ввиду Lamer (Virt) Must Die?
← →
DiamondShark (2003-12-26 15:07) [58]
> Синтаксис плохой. Я вообще не понимаю назначение -> ;
> В VB такого нет и все работает нормально.
Запяточие -- разделитель операторов.
В ВБ синтаксис фуфло. Там символ конца строки считается значимым.
В Паскале синтаксис свободный.
← →
Yanval (2003-12-26 16:01) [59]>Игорёк
Ну, никто-же не материт С, например за то, что вместо точки ставится стрелка, хотя тоже трудно при переходе. Если паскаль кому-то сложен это ещё не повод для его смерти.
← →
uw (2003-12-26 16:21) [60]>Sha © (26.12.03 11:57) [31]
В Алголе-60 begin и end - не операторные скобки, а ограничители блока. Это, в частности, означает, что после if ... then begin могут следовать описания переменных, и только потом - операторы. Кроме того, текст после end вплоть до ; воспринимается компилятором как комментарий. У Паскаля структура другая, а компиляторы быстрые. И это хорошо.
← →
uw (2003-12-26 16:25) [61]А C мне тоже нравится. Правда, я на нем писал только программы для контроллеров, никаких неудобств при этом не испытывал.
← →
REA (2003-12-26 16:46) [62]А вот такое:
If A Then
If B Then DoSomethingAB;
Else
DoSomethingNotA
Это ; перед else? Обязан ли я ставить Begin End?
← →
Юрий Зотов (2003-12-26 19:04) [63]Ну, что ж, начнем отвечать, по порядку.
> MOA © (26.12.03 13:04) [46]
Совершенно ясно, что это просто ошибка в лексическом блоке компилятора. И так же совершенно ясно, что она имеет отношение к конкретной РЕАЛИЗАЦИИ языка, но не к самому языку.
> blackman © (26.12.03 13:12) [47]
>>Алгол - это метаязык. Язык описания алгоритмов
> Стало быть на всех остальных алгоритм не запишешь
Потрясающая логика. No comments. За исключением одного - при цитировании Вы опутили слово "ИЗНАЧАЛЬНО". А зря. Оно ключевое.
Что же касается приведенных Вами ссылок, то первая из них моего утверждения не опровергает, а вторая - подтверждает его:
history: Originally created in 1960 as an abstract language for describing algorithms.
Строгости ради следует добавить, что и утвержение это - вовсе не мое. Его можно найти чуть ли не в любой книжке по алголу.
> Sha © (26.12.03 13:24) [50]
> Поэтому на нем удобно вести обучение написанию алгоритмов.
Да. Потому что он именно для этого и разрабатывался. На нем можно обучать и практическому программированию - потому что он хорошо структурирован и пр. Но все же запись алгоритма на некоем абстрактном языке (каким первоначально и был Алгол) и написание практической программы - вещи несколько разные. И вот как раз для второго Паскаль подходит лучше. И тоже потому что он именно для этого и разрабатывался.
> Некоторым может не нравится постоянно думать, обходя каждый
> камень на пути. Гораздо лучше, когда все камни убраны с твоей
> дороги
Вы, вероятно, имели дело с PL/1, который даже на уровне декларации самого языка УЖЕ допускал практически свободное преобразование любых типов данных в любые другие, смешение их в одном выражении и пр. Все камни убраны, не правда ли? Но вот как раз для ОБУЧЕНИЯ это, согласитесь, просто ужасно. Хуже трудно придумать - и в смысле прививания СТИЛЯ это ПРИНЦИПИАЛЬНЫЙ недостаток. А паскалевские "камни" (то бишь точки с запятыми), во-первых, вовсе не принципиальны, а во-вторых вообще перестают быть камнями через пару недель практики. И никаких проблем.
> Дети пользуются выключателем не задумываясь об электронах.
> Они узнают об этом позже. Почемы бы не перенести эту
> концепцию на язык?
Уже перенесли - и получился бейсик. Потом, правда, выяснилось, что как раз для обучения он плох - прививает скверный стиль. Почему так получилось? Вероятно, потому, что во всем надо знать меру - в том числе, и в упрощении языка. Продолжая Ваше сравнение - дети пользуются выключателем, не задумываясь об электронах, но все же задумываясь о том, какой выключатель включает какую лампочку и куда его нужно щелкать - вверх или вниз. Правда, через пару дней они привыкают и задумываться уже перестают - то же самое и с Паскалем. А электроны - это уже коды и ассемблер. Совсем другая опера.
> По хорошей программе взляд должен скользить как по детективу,
> она должна быть написана так, чтобы смысл доходил легко, без
> запинок.
Совершенно верно. И если программу пишет грамотный программист, то он именно так и напишет, на любом языке. В том числе, и на Паскале. Но если другой программист мучается с ее прочтением (о чем Вы первоначально и говорили) - сорри, он просто плохо знает язык. Но не язык в этом виноват, уверяю Вас (даже если говорить о Си с его заморочками). И уж что-что, а хорошо написанные Паскаль-программы как раз абсолютно ясны и прозрачны. Если знать Паскаль, конечно.
> А "операторные скобки ОПЕРАТОРАМИ не являются".
> Очевидные истины не требуется повторять
Я не считал, что эта истина для Вас очевидна - исходя из Ваших же собственных слов:
Sha © (26.12.03 11:26) [24]
Вирт почему-то решил, что begin и end не являются операторами,
и значит, перед end и после begin точки с запятой необязательны.
Поэтому я и хотел пояснить трактовку begin-end в Паскале. Если она и без того для Вас очевидна, то, конечно, старался я зря - но ведь тогда Вы противоречите сами себе.
> REA © (26.12.03 16:46) [62]
> Обязан ли я ставить Begin End?
Согласно определению самого языка - не обязаны. Но, как выяснилось, в его Delphi-реализации есть погрешность, поэтому в Delphi-программе - обязаны.
← →
blackman (2003-12-26 19:46) [64]>Потрясающая логика. No comments. За исключением одного - при >цитировании Вы опутили слово "ИЗНАЧАЛЬНО"
А изконечно уже нет ? :)
Изначально предполагалось, что это один из алгоритмических языков.
И потом, неужели вы не поняли шутки ?
Я так не играю :)
← →
Sha (2003-12-26 19:46) [65]> Юрий Зотов © (26.12.03 19:04) [63]
1. Уж очень серьезно вы относитесь ко всем репликам в "потрепаться". Я бы и сам подписался под некоторыми из ваших ответов, но в иной ситуации. А среди, я надеюсь, единомыщленников, принят несколько иной тон.
2. Есть несколько замечаний к Вашей манере вести дискуссии. Вы ведь не думаете, что знаете все лучше всех? Я, например, уверен в обратном, но не демонстрирую этого.
3. Есть такой 100%-выигрышный способ завалить оппонента. Сначала приписать ему нечто, чего он не говорил, а потом разгромить с треском эту позицию. Не хочу сказать, что Вы пользуетесь этим приемом, но иногда подходите к нему очень близко.
С наилучшими пожеланиями,
Александр Шарахов.
← →
Petr V. Abramov (2003-12-26 20:43) [66]Юрий Зотов © (26.12.03 11:52) [30]
Так все-таки не надо :) - так получается, что список операторов обязан начинаться с простого оператора. В [27] как раз было лучше. Насчет бесконечной рекурсии определения, которой Вы, скорее всего, испугались - реально ее нет, и [27] раскручивается на ура, я даже офигел, насколько естественным образом это получается
← →
Юрий Зотов (2003-12-26 21:25) [67]> Petr V. Abramov © (26.12.03 20:43) [66]
Согласен. Я потом и сам же об этом же подумал, но поленился еще раз исправлять, да и не столь это важно для ветки. Пожалуй, первоначальный вариант действительно верен, только надо ввести еще пустой список (через пустую цепочку - в теории ее обычно обозначают буквой "эпсилон"):
<список операторов> ::= <пустая цепочка>
<оператор>
<оператор> ; <список операторов>
> Sha © (26.12.03 19:46) [65]
Видимо, я просто задира. Мир?
:о)
← →
Sha (2003-12-26 21:51) [68]Юрий Зотов © (26.12.03 21:25) [67]
OK, мир
← →
Petr V. Abramov (2003-12-26 22:03) [69]Юрий Зотов © (26.12.03 21:25) [67]
Тогда уж пустой оператор, иначе ( что относительно важно для ветки :) не получится глупая, но синтаксически верная конструкция
if true then
else ;
← →
Иван Шихалев (2003-12-26 22:27) [70]1-н момент.
Во-первых, средней паршивости профессионалу давно насрать на каком языке писать - есть "студенты" пусть они и пишут.
Во-вторых, готов спорить со всякими любителями C (или другого языка общего назначения) что одинаковую задачу решу примерно в то же время, что и оппонент на C. Готов спорить даже, что при решениии задачи на вашем занюханном диалеките - мне понадобится не больше месяца от решения специалиста по вашему занюхануму.
PS. Менее 10 бутылок коньяка - не интересует.
← →
Юрий Зотов (2003-12-26 22:52) [71]> Sha © (26.12.03 21:51) [68]
:о)
> Petr V. Abramov © (26.12.03 22:03) [69]
Все же не так. Пустой список - он и есть пустой список. Пример:
begin
// И никаких точек с запятыми - вообще ничего, кроме этого
// комментария, который, естественно, игнорируется.
end
А пустой оператор - это <простой оператор>, точно такой же как и все остальные:
...
<оператор while> ::= while <условие> do <оператор>
<пустой оператор> ::= ;
<простой оператор> ::= ...
<оператор while>
<пустой оператор>
И все раскручивается само собой.
← →
Petr V. Abramov (2003-12-27 01:37) [72]> Юрий Зотов © (26.12.03 22:52) [71]
Если < пустой оператор > - это < простой оператор >, то пустой список естественным образом определяется через него, и специального определения не требуется ( что не делает неверным [67]).
Но все равно в [71] есть "не так"! :)
<пустой оператор>" - это не semicolon! Иначе конструкция
if <condition> then <пустой оператор> else <оператор>
выглядит как if false then ; else ; и получаем заголовок ветки :)
<пустой оператор> ::= <ничего нет>, где
<ничего нет> ::= <разделители и комментарии> (которые тоже являются частью входного потока, и, соответственно, языка)
P.S. Извини за занудство :)
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Память: 0.63 MB
Время: 0.014 c