Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline impersonalis  
#1 Оставлено : 24 августа 2012 г. 1:05:20(UTC)
impersonalis


Статус: Member

Группы: Registered
Зарегистрирован: 24.08.2012(UTC)
Сообщений: 11
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Очень хотелось бы увидеть вариант блока IF без ELSE
Offline mikekaganski  
#2 Оставлено : 24 августа 2012 г. 3:17:35(UTC)
mikekaganski


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Мужчина
Российская Федерация
Откуда: Khabarovsk, Russia

Сказал «Спасибо»: 130 раз
Поблагодарили: 33 раз в 29 постах
If - это функция. Она, как и все функции, возвращает значение, поэтому она должна иметь возможность вычислить это значение при любом раскладе. Если это значение не важно, можно написать

if(Condition;Expression;0)
В качестве альтернативы можно было бы только генерировать ошибку при проходе алгоритма по незаданному else-пути, как это сделано, например, в erlang. Но это ведь не то, что Вам надо?
С уважением,
Михаил Каганский
Offline impersonalis  
#3 Оставлено : 24 августа 2012 г. 10:43:05(UTC)
impersonalis


Статус: Member

Группы: Registered
Зарегистрирован: 24.08.2012(UTC)
Сообщений: 11
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: mikekaganski Перейти к цитате
If - это функция. Она, как и все функции, возвращает значение, поэтому она должна иметь возможность вычислить это значение при любом раскладе. Если это значение не важно, можно написать

if(Condition;Expression;0)
В качестве альтернативы можно было бы только генерировать ошибку при проходе алгоритма по незаданному else-пути, как это сделано, например, в erlang. Но это ведь не то, что Вам надо?


Спасибо за ответ, но то, что if это функция - утверждение, в рамках ЯП, спорное (скорее уж оператор). В любом случае (если в SMath Studio это функция), удобный дизайн может реализовывать else-ветвь за пользователя, "автоматом" возвращая 0 в случае если ветвь не определена (подобно тому как int main можно заменить на void main).
Offline mikekaganski  
#4 Оставлено : 24 августа 2012 г. 11:05:23(UTC)
mikekaganski


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Мужчина
Российская Федерация
Откуда: Khabarovsk, Russia

Сказал «Спасибо»: 130 раз
Поблагодарили: 33 раз в 29 постах
Ну, насчёт ЯП - мы тут на форуме конкретного продукта, и говорим о конкретных вещах. Так что давайте не обобщать, а то ведь я знаю ещё и такой факт об if-else, что это - речевая конструкция, определяющая сложноподчинённое предложение Good
В рамках SMath - это функция:

a:if(Condition;Expr1;Expr2)
А удобный дизайн сделает результат такого присвоения неочевидным. Пользователь может не ожидать увидеть 0 не только в случае вычисления Expr1, но и в результате Condition=false.

Кстати, именно ЯП примера, приведённого Вами, исторически демонстрирует, что "удобством" следует жертвовать, если оно что-то делает неявным: что случиось с неявным int?
С уважением,
Михаил Каганский
Offline mikekaganski  
#5 Оставлено : 29 августа 2012 г. 5:22:05(UTC)
mikekaganski


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Мужчина
Российская Федерация
Откуда: Khabarovsk, Russia

Сказал «Спасибо»: 130 раз
Поблагодарили: 33 раз в 29 постах
Хотя с другой стороны: если if(условие;выражение) в отличие от if(условие;выражение1;выражение2) не будет функцией (т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"Wink, то всё будет чётко и прозрачно...
С уважением,
Михаил Каганский
thanks 1 пользователь поблагодарил mikekaganski за этот пост.
impersonalis оставлено 29.08.2012(UTC)
Offline impersonalis  
#6 Оставлено : 29 августа 2012 г. 16:13:50(UTC)
impersonalis


Статус: Member

Группы: Registered
Зарегистрирован: 24.08.2012(UTC)
Сообщений: 11
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Автор: mikekaganski Перейти к цитате
(т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"Wink, то всё будет чётко и прозрачно...


к тому же, тайп-каст bool->int можно реализовать (в SMath уже реализовано) непосредственным умножением на условие (имхо, очень удобно).
Например, функция-знак может быть реализована следующим образом:

Цитата:
sgn(x):=(x>0)-(x<0)
Пользователи, просматривающие эту тему
Similar Topics
Интегралы от функции, использующей if-else (Вопросы по использованию)
по hard-t 27.06.2010 14:32:36(UTC)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.