Где логика ?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7387
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Где логика ?

Сообщение Игорь Столяров »

ДД !

Известный косяк синтаксиса Clarion - это отсутствие логического типа данных.
Но в то же время сам RTL видит разницу в передаваемом параметре:

Код: Выделить всё

  I# = 2
  If Choose(Not I#,1,2) <> Choose(I#,1,2)
     Message('Это разное !')
  end
Я тоже хочу сделать подобную функцию, в которой можно было бы определить какой тип имеет
передаваемое в параметре значение: логическое или цифровое.

Возможно ли такое в принципе ? Спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 426
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 90 раз
Поблагодарили: 5 раз

Где логика ?

Сообщение ingasoftplus »

Игорь Столяров писал(а): 26 Апрель 2024, 13:17 логическое
определитесь, что это такое у вас

Потому как в Кларионе с логикой все просто
если сторока:
пустая = ЛОЖЬ
что-то есть = ИСТИНА

если число:
0 = ЛОЖЬ
любое<>0 = ИСТИНА

During logical evaluation,
any non-zero numeric value or non-blank string value indicates a true condition, and
a null (blank) string or zero numeric value indicates a false condition
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7387
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Где логика ?

Сообщение Игорь Столяров »

ingasoftplus писал(а): 26 Апрель 2024, 15:17 Потому как в Кларионе с логикой все просто
К сожалению нет. Логики в Clarion вообще нет, она сделана через костыль. :(
И как следствие, в полном соответствии с процитированной Вами справкой:

Код: Выделить всё

S1  String(20)
  Code
  S1  = False
  If S1 then Message('True').
И вроде всё правильно и в то же время через попу. :(
Про арифметические и строковые операции с "логическими" данными лучше даже не начинать.

Код: Выделить всё

  If True - True = False - False then Message('True').
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4629
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 7 раз
Поблагодарили: 37 раз

Где логика ?

Сообщение finsoftrz »

Игорь, без Вас очень скучно было. :D
По этой теме, лучше вопрос задавать с начала, как коллега уже написал, а не с середины. То есть опишите практическую ситуацию, в которой требуется отличать значения 0/1 от true/false.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7387
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Где логика ?

Сообщение Игорь Столяров »

finsoftrz писал(а): 27 Апрель 2024, 7:25 в которой требуется отличать значения 0/1 от true/false
Так я с этого и начал ... Просто читают с середины и отвечают, то что знают. :)

А вопрос был простой. Хочу сделать функцию, которая работает как Choose().
Т.е. выполняет действие в зависимости от того, что было в первом параметре: численное или логическое значение.
Но проблема в том, что логических значений в Clarion нет (в отличии от B4A например).
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4629
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 7 раз
Поблагодарили: 37 раз

Где логика ?

Сообщение finsoftrz »

Начало это не то, что Вы хотите, а то, почему Вы это захотели.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4991
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

Где логика ?

Сообщение kreator »

Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1703
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Где логика ?

Сообщение gopstop2007 »

Игорь Столяров писал(а): 26 Апрель 2024, 13:17

Код: Выделить всё

  I# = 2
  If Choose(Not I#,1,2) <> Choose(I#,1,2)
     Message('Это разное !')
  end
Не понял, в чем проблема?
В левом - CHOOSE (condition [,truevalue, falsevalue ]), в правом - CHOOSE (expression ,value, value [,value...] )
У Вас condition = FALSE изначально )
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4991
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

Где логика ?

Сообщение kreator »

gopstop2007 писал(а): 28 Апрель 2024, 16:32
Игорь Столяров писал(а): 26 Апрель 2024, 13:17

Код: Выделить всё

  I# = 2
  If Choose(Not I#,1,2) <> Choose(I#,1,2)
     Message('Это разное !')
  end
Не понял, в чем проблема?
В левом - CHOOSE (condition [,truevalue, falsevalue ]), в правом - CHOOSE (expression ,value, value [,value...] )
У Вас condition = FALSE изначально )
Игорь только про то как определить на входе логическую переменную или арифметическую. А это только пример. Choose это как-то понимает. И ему нужен аналог.
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3135
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Где логика ?

Сообщение Дед Пахом »

Посмотреть код CHOOSE в отладчике не предлагать.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 4991
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

Где логика ?

Сообщение kreator »

kreator писал(а): 27 Апрель 2024, 16:21 Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?
В развитие идеи. Есть функция evaluate, она сама всё сделает, не надо ничего распарсивать. И можно попробовать использовать тип ANY. Честно говоря, не часто использовал этот тип, поэтому не очень уверен.
We are hard at work… for you. :)
Ответить