![]() |
#1 |
Участник
|
Троичная логика и двоичная логика
Добрый день!
Горю возмущением! ![]() В последнее время при определении переменных-флагов не хватает значений да-нет, разрешено-запрещено, необходимо ещё значение "не определено". Поэтому использую (0,1,2) - не определено, разрешено, запрещено. А коллега на ревью не соглашается. Насколько я знаю, есть троичная логика, даже троичный компьютер. С двумя вариантами (и булевой переменной) алгоритм или излишне сложный (я так и не додумала..), или , на мой взгляд, не надежный. Коллеги, есть опыт? Поделите, пожалуйста, мнениями! А то сгорю дотла ![]() |
|
![]() |
#2 |
Administrator
|
в MS Access гаечка закрашивалась сереньким, если не определена.
а так - опшн вам в помощь: <пусто>,Да,Нет |
|
|
За это сообщение автора поблагодарили: mira (1). |
![]() |
#3 |
Участник
|
Санчо, вопрос у коллеги не к типу данных (опшен, целое).
Вопрос в том - что незя! Надо сделать алгоритм, чтобы было "да" и "нет" и поэтому булева переменная. Я математик по образованию, а не ит-шник. Может в новых языках каких-то есть конструкции с троичной логикой и можно почитать обоснование, в каких ситуациях можно использовать троичную логику? Питон, какой-нибудь? То, что, побарахтавшись в логике "да-нет", перешла к "не определено- да-нет", не аргумент. Мне и самой хочется понять, когда ситуация сводится к да-нет, а когда к не определено-да-нет. Во имя воспитания точности мышления. Человечья логика хитрая вещь, поэтому хочется не перекричать (и не убить ..ой, убила бы этих гнусных ревьюеров), а раз и на всегда разобраться. |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
Выпускник Бауманки : "Алгоритм по схеме "да-нет-или" ветвится быстрее, чем просто по дихотомии да-нет"
Подробнее пока у него нет времени мне рассказывать. Может потом скажут, где почитать.. |
|
![]() |
#6 |
Участник
|
погуглила, есть описательные статьи на эту тему
«Лишняя» переменная Недвухзначность логики восходит к основоположнику первой законченной логической теории — Аристотелю, который между утверждением и антиутверждением помещал третье «привходящее» — «может да, а может нет». В последующем развитии логика была упрощена за счет отказа от этого третьего состояния и в таком виде оказалась необычайно живучей, несмотря на свое несоответствие нечеткой, не всегда раскладывающейся на «да» и «нет» действительности. В разные века «расширить» логику пытались Оккам, Лейбниц, Гегель, Кэрролл и некоторые другие мыслители, в конечном же виде трехзначную логику разработал в начале XX века польский ученый Ян Лукасевич." "Двухзначная математическая логика, которая повсеместно царит в мире компьютерной и прочей «интеллектуальной» техники, по мнению создателя троичного компьютера Николая Брусенцова, не соответствует здравому смыслу: «закон исключенного третьего» отрезает иные заключения, кроме «истины» и «не-истины», а между тем процесс познания реальности человеком отнюдь не сводится к дихотомии «да/нет». Поэтому, утверждает Брусенцов, чтобы стать интеллектуальным, компьютеру следует быть троичным." |
|
![]() |
#7 |
Участник
|
NULL, кстати, в sql
|
|
![]() |
#8 |
Участник
|
"В двоичной логике возможны парадоксы, а в троичной нет.
Замечу, шины у компьютера троичные. Еще в троичной логике нет ошибок округления" |
|
![]() |
#9 |
Участник
|
Цитата:
![]() ![]() |
|
|
За это сообщение автора поблагодарили: Sancho (1). |
![]() |
#10 |
Участник
|
не только в SQL. Почитайте про nullable типы (https://docs.microsoft.com/ru-ru/dot...le-value-types)
Цитата:
Но не всем это нравится вот например https://habr.com/ru/post/309462/ Моё мнение - в чужой монастырь со своим уставом... лучше не надо. При разработке в любой системе стоит придерживаться правил этой системы. Под системой можно понимать как конкретный фреймворк или среду разработки, так и в целом инфраструктуру и сообщество специалистов разрабатывающих продукт. Если от какого-то нововведения вам лично станет хорошо, а в целом системе не очень, то выгода будет сомнительна. Думайте не только об эффективности создания алгоритма но и о поддержке его в будущем. Вы же разрабатывате не разовый скрипт а продукт у которого в перспективе будет сколько-нибудь продолжительный жизненный цикл? Кстати а как вы относитесь к тому что в аксапте нет NULL в значениях табличных полей? Последний раз редактировалось S.Kuskov; 05.03.2020 в 17:44. |
|
|
За это сообщение автора поблагодарили: mira (1). |
![]() |
#11 |
Участник
|
S.Kuskov, большое спасибо!
![]() Тем более, вернула ревьюеру вопрос: для моего варианта - одна переменная Integer - я возвращаю параметр из процедуры g_bool_Editable := l_cu_хх.SetTo; это просто; в его варианте - две логические переменные - g_bool_IsInitialized придется передавать параметром в процедуру SetTo. А как иначе? ![]() И повод подумать над "гранями" null, и о троичной логике. Цитата:
![]() Меня послали в курилку. По размышлении : этот раздел не вообще о программировании в Наве, а технические аспекты Нава? Хорошо. |
|
![]() |
#12 |
Участник
|
Цитата:
Имхо, надежность кода вызывает вопроса. Пишут оптимисты, которых пофиг, что там в данных. Видит качество данных только разработчик sql. И вот ему не позавидуешь. Логика интерфейсов в Наве скрывает ошибки, иначе пользователи сообщают. А разработчику sql приходится потрудиться, чтобы исхитриться написать условия и из данных+мусор выделить для RS отчетов чистые данные. Это тааакой итерационный процесс с вопросами юзеров : а что это? а это зачем? а это откуда? Может, я мудрю. Но привыкла отвечать за качество кода. Отсюда и мои вопросы. |
|
![]() |
#13 |
Участник
|
В книге Сергея Моисеенко есть параграф "Трехзначная логика и предложение WHERE"
![]() Как раз те нюансы, которые когда-то были не понятны. А теперь ![]() p.s. Трехзначную логику в алгоритм в итоге вернула ![]() |
|