Статус: Member
Группы: Registered
Зарегистрирован: 24.08.2012(UTC)
Сообщений: 11
Откуда: Москва
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
Очень хотелось бы увидеть вариант блока IF без ELSE
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Откуда: Khabarovsk, Russia
Сказал «Спасибо»: 130 раз Поблагодарили: 33 раз в 29 постах
If - это функция. Она, как и все функции, возвращает значение, поэтому она должна иметь возможность вычислить это значение при любом раскладе. Если это значение не важно, можно написатьif(Condition;Expression;0) В качестве альтернативы можно было бы только генерировать ошибку при проходе алгоритма по незаданному else-пути, как это сделано, например, в erlang. Но это ведь не то, что Вам надо?
С уважением, Михаил Каганский
Статус: 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).
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Откуда: Khabarovsk, Russia
Сказал «Спасибо»: 130 раз Поблагодарили: 33 раз в 29 постах
Ну, насчёт ЯП - мы тут на форуме конкретного продукта, и говорим о конкретных вещах. Так что давайте не обобщать, а то ведь я знаю ещё и такой факт об if-else, что это - речевая конструкция, определяющая сложноподчинённое предложение
В рамках SMath - это функция:
a:if(Condition;Expr1;Expr2) А удобный дизайн сделает результат такого присвоения неочевидным. Пользователь может не ожидать увидеть 0 не только в случае вычисления Expr1, но и в результате Condition=false.
Кстати, именно ЯП примера, приведённого Вами, исторически демонстрирует, что "удобством" следует жертвовать, если оно что-то делает неявным: что случиось с неявным int?
С уважением, Михаил Каганский
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 19.03.2012(UTC)
Сообщений: 112
Откуда: Khabarovsk, Russia
Сказал «Спасибо»: 130 раз Поблагодарили: 33 раз в 29 постах
Хотя с другой стороны: если if(условие;выражение) в отличие от if(условие;выражение1;выражение2) не будет функцией (т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"
, то всё будет чётко и прозрачно...
С уважением, Михаил Каганский
1 пользователь поблагодарил mikekaganski за этот пост.
Статус: Member
Группы: Registered
Зарегистрирован: 24.08.2012(UTC)
Сообщений: 11
Откуда: Москва
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
Автор: mikekaganski (т.е. будет вести себя в этом смысле подобно for - при использовании в правой части присвоения выдавать ошибку "выражение задано неверно"
, то всё будет чётко и прозрачно...
к тому же, тайп-каст bool->int можно реализовать (в SMath уже реализовано) непосредственным умножением на условие (имхо, очень удобно).
Например, функция-знак может быть реализована следующим образом:
Цитата: sgn(x):=(x>0)-(x<0)
Быстрый переход
Форум проекта SMath
SMath Studio
- Скачать SMath Studio
--- Архив
--- Ночные сборки
- Примеры использования
- Вопросы по использованию
- Предложения
- Ошибки
Математика
- Документы
- Алгоритмы
- Математические задачи
Общение
- О проекте
- Общение
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.