Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

; 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;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.039 c
3-63025
eds
2003-12-22 11:34
2004.01.20
Возможно ли сделать доступ к БД в формате DBF многопользовательск


1-63118
diMAN
2004-01-06 15:11
2004.01.20
Преобразование произвольной строки в TDateTime


1-63253
maker
2004-01-07 22:23
2004.01.20
Как получить указатель на функцию класса?


1-63065
афвуд
2004-01-08 18:57
2004.01.20
Размеры окна в нормальном состоянии


3-62959
eds
2003-12-24 09:41
2004.01.20
Статистика о работе пользователей (IP)