Будущая идея в програмирование
уже используют давно
fefs.h:
fefs.h:
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef MAYBE
#define MAYBE 2
#endif
typedef unsigned char FXbool;
Maybe Bool 

true/false/hz лучше
если будут спрашивать официальные лица, hz означает hesitation zone, но мы-то будем знать
если будут спрашивать официальные лица, hz означает hesitation zone, но мы-то будем знать

Это станет принуипиально новый подход в програмированиеДа такая хрень уже в бусте миллион лет живет:
First Release
1.32.0
boost::logic::tribool b = some_operation;
if (b) {
// b is true
}
else if (!b) {
// b is false
}
else {
// b is indeterminate
}
А разве нет языков, которые сделаны под нечёткую логику?
А так даже троичные ЭВМ в МГУ когда-то работали
А так даже троичные ЭВМ в МГУ когда-то работали

Вы будете смеяться, но логические величины в VHDL могут принимать одно из девяти разных значений, определённых в стандарте IEEE 1164.
Maybe Boolвот это самый правильный подход.
А по сабжу ещё есть неопределённые поля в БД
А мне неопределенные операторы и конструкции языка!
undefined чтоли?
вот это самый правильный подход.вообще-то это не по сабжу.
А по сабжу ещё есть неопределённые поля в БД
вы путаете optional и bool с тремя значениями

ну это философский вопрос: являются ли два типа T1 и T2 разными, если ![[math]$|T1| = |T2| < \infty$[/math]](mathimg.php?math=%24%7CT1%7C%20%3D%20%7CT2%7C%20%26lt%3B%20%5Cinfty%24)
Тип — это же не только количество значений, еще и возможные операции над ним.
Вообще логично, чтобы tribool можно было тоже сделать optional.
Вообще логично, чтобы tribool можно было тоже сделать optional.
боюсь даже спросить что такое ![[math]$|T1|$[/math]](mathimg.php?math=%24%7CT1%7C%24)
возможно, это некая метрика на пространстве типов ?
возможно, это некая метрика на пространстве типов ?

Вообще логично, чтобы tribool можно было тоже сделать optional.MaybeT Maybe Bool
боюсь даже спросить что такоеЭто мощность множества значений, ватсон
возможно, это некая метрика на пространстве типов ?
что ты отвечаешь на мои сообщения английскими словами?
Это мощность множества значений, ватсонспасибо, что без терминаторов ;-)
Ну черт, так же лучше звучит, чем "мощности множеств значений совпадают и конечны" 
Мне казалось, что я выразился достаточно ясно.
2:
"И ты прав."
Все зависит от того, на каком уровне абстракции мы находимся. Если мы пишем в машинных кодах, то там и операций не так-то много, да и типов раз-два и обчелся, а все остальное - от лукавого / для удобства написания.

Мне казалось, что я выразился достаточно ясно.
2:
"И ты прав."
Все зависит от того, на каком уровне абстракции мы находимся. Если мы пишем в машинных кодах, то там и операций не так-то много, да и типов раз-два и обчелся, а все остальное - от лукавого / для удобства написания.что ты отвечаешь на мои сообщения английскими словами?эти слова из языка Haskell. Я же не виноват, что он так напоминает английский.
В этом не виноват, конечно. Но пояснить можно было.
А мне неопределенные операторы и конструкции языка!
namespace std {
namespace tr2 {
templace<class C>
С& operator UB(C&) throw(::std::UB) {
//...
}
}
}Это не скомпилится (тип у оператора преобразования указан но намек я понял 

Это не скомпилитсяестественно. Надо вместо букв UB придумать написание оператора, например - ?.
Зато любой индуский код можно будет написать обобщённо:
#include <iostream>
using namespace std;
using namespace std::tr2;
int main {
cout << ? cin;
}
А, значит не понял.
Просто у тебя одноначный намек на то, что есть тип std::UB и я понял это как оператор преобразования. А так как есть throw, то там есть некий простор для собственно UB.
Просто у тебя одноначный намек на то, что есть тип std::UB и я понял это как оператор преобразования. А так как есть throw, то там есть некий простор для собственно UB.
std::UB - просто исключение, которое может выкинуться при выполнении оператора
я уж понял, просто совпадение имени оператора и исключения ввело в заблуждение меня.
я уж понял, просто совпадение имени оператора и исключения ввело в заблуждение меня.неудивительно, ведь это UB

Много строчек. В хаскеле всё проще - undefined, как я уже писал.
MaybeT - монадный трансформер для монады Maybe, придуманный по аналогии с другими трансформерами. По недоразумению (авторы почему-то предполагают, что вносимые в проект изменения должны быть в первую очередь полезны и лишь во вторую забавны) этого трансформера пока не добавили в официальную ветку. На багтрекре предложен такой вариант:
В таком случае можно бесконечно конструировать типы неопределённых значений.
MaybeT (Maybe Bool MaybeT (MaybeT (Maybe Bool ...
ну или
MaybeT (MaybeT (Identity Bool MaybeT (MaybeT (MaybeT (Identity Bool...
Upd: Как раскрасить код?
MaybeT - монадный трансформер для монады Maybe, придуманный по аналогии с другими трансформерами. По недоразумению (авторы почему-то предполагают, что вносимые в проект изменения должны быть в первую очередь полезны и лишь во вторую забавны) этого трансформера пока не добавили в официальную ветку. На багтрекре предложен такой вариант:
{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances #-}
module Control.Monad.Maybe
(MaybeT,
runMaybeT,
module Control.Monad,
module Control.Monad.Trans)
where
import Control.Monad
import Control.Monad.Trans
import Control.Monad.State
import Control.Monad.Reader
import Control.Monad.Writer
newtype MaybeT m a = MaybeT {runMaybeT :: m (Maybe a)}
instance Functor m => Functor (MaybeT m) where
fmap f x = MaybeT $ fmap (fmap f) $ runMaybeT x
instance Monad m => Monad (MaybeT m) where
return = MaybeT . return . Just
x >>= f = MaybeT $ runMaybeT x >>= maybe (return Nothing) (runMaybeT . f)
fail _ = MaybeT $ return Nothing
instance Monad m => MonadPlus (MaybeT m) where
mzero = MaybeT $ return Nothing
mplus x y = MaybeT $ do
mx <- runMaybeT x
case mx of
Nothing -> runMaybeT y
Just _ -> return mx
-- Provide other MTL instances, for convenience
instance MonadTrans MaybeT where
lift = MaybeT . liftM Just
-- (Add other MTL instances, and a MonadFix instance)
instance MonadIO m => MonadIO (MaybeT m) where
liftIO = lift . liftIO
instance MonadState s m => MonadState s (MaybeT m) where
get = lift get
put = lift . put
instance MonadReader r m => MonadReader r (MaybeT m) where
ask = lift ask
local f = MaybeT . local f . runMaybeT
instance (Monoid w, MonadWriter w m) => MonadWriter w (MaybeT m) where
tell = lift . tell
listen m = MaybeT (do (mv,w) <- listen (runMaybeT m)
case mv of
Nothing -> return Nothing
Just v -> return (Just (v,w
pass m = MaybeT (do mvf <- runMaybeT m
case mvf of
Nothing -> return Nothing
Just (v,f) -> pass (return (Just v,f
В таком случае можно бесконечно конструировать типы неопределённых значений.
MaybeT (Maybe Bool MaybeT (MaybeT (Maybe Bool ...
ну или
MaybeT (MaybeT (Identity Bool MaybeT (MaybeT (MaybeT (Identity Bool...
Upd: Как раскрасить код?
boost::tribool b = some_operation;
if (b) {
// b is true
}
else if (!b) {
// b is false
}
else {
// b is indeterminate
}
чем то напоминает классику, да?

bool CheckFlag(bool flag)
{
if (flag == true)
{
return true;
}
else if (flag == false)
{
return false;
}
else
{
return (!true) && (!false);
}
}
Оставить комментарий
:tribool b = some_operation;
stm6692945
Как известно все на данный момент языки работают толькосо значениями true и false
Но мой взгляд это не достаточно и необходимо добавить новый тип: unsure (неуверен)
Это станет принуипиально новый подход в програмирование . Вот.