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

Уведомление

Icon
Error

Вход


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


Статус: Member

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Очень хотелось бы увидеть вариант блока IF без ELSE

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

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)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.