Страница 1 из 1

Где логика ?

Добавлено: 26 Апрель 2024, 13:17
Игорь Столяров
ДД !

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

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

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

Возможно ли такое в принципе ? Спасибо ! :)

Где логика ?

Добавлено: 26 Апрель 2024, 15:17
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

Где логика ?

Добавлено: 26 Апрель 2024, 23:30
Игорь Столяров
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').

Где логика ?

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

Где логика ?

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

А вопрос был простой. Хочу сделать функцию, которая работает как Choose().
Т.е. выполняет действие в зависимости от того, что было в первом параметре: численное или логическое значение.
Но проблема в том, что логических значений в Clarion нет (в отличии от B4A например).

Где логика ?

Добавлено: 27 Апрель 2024, 8:03
finsoftrz
Начало это не то, что Вы хотите, а то, почему Вы это захотели.

Где логика ?

Добавлено: 27 Апрель 2024, 16:21
kreator
Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?

Где логика ?

Добавлено: 28 Апрель 2024, 16:32
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 изначально )

Где логика ?

Добавлено: 28 Апрель 2024, 17:03
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 это как-то понимает. И ему нужен аналог.

Где логика ?

Добавлено: 28 Апрель 2024, 17:16
Дед Пахом
Посмотреть код CHOOSE в отладчике не предлагать.

Где логика ?

Добавлено: 28 Апрель 2024, 23:45
kreator
kreator писал(а): 27 Апрель 2024, 16:21 Может сделать строковый параметр? А внутри функции разбирать строку на предмет наличия символов для логических операций. И тоже не представляю зачем это нужно?
В развитие идеи. Есть функция evaluate, она сама всё сделает, не надо ничего распарсивать. И можно попробовать использовать тип ANY. Честно говоря, не часто использовал этот тип, поэтому не очень уверен.