twobomb: Ну чтобы param1 был параметром первой функции AND_NOT. Как ее передать туда? Второй я могу получить, а вот нужно и первый получить, передав второй
David Amirkhanov: Мне кажется, это не разрешимая задача. Пересмотрите свою функцию. Здесь в любом случае одна переменная остается не инициализированной.
Если я угадал, то в вашем случае логическую невозможность вычисления значений (в виду того что они ссылаются друг на друга) можно преодолеть т.к. r равен нулю: param1 в любое случае будет равен true, а тогда param2 будет равен false. Это все возможно при условии что 1) AND_NOT - действительно функция вычисляющая результат логического отрицания логического произведения и 2) param1 будет объявлено/вычислено первым. Если для расчетов критично определенное значение аргументов, то случай когда param2 объявляется первым логически невозможен. Если это не критично, то возможен: в функцию первым аргументом просто будет передан undefined, вот и всё - param1 и param2 будут равны false. А если речь не о логике, то вся моя болтовня абсолютно не к месту, лал.
//************BASIC OPERATIONS*************
function AND(bit1, bit2)
{
return bit1 & bit2;
}
function OR(bit1, bit2)
{
return bit1 | bit2;
}
function NOT(bit)
{
if(bit)
return 0;
else
return 1;
}
//************COMPOSIT OPERATIONS*************
function AND_NOT(bit1, bit2)
{
return NOT(AND(bit1, bit2));
}
function XOR(bit1, bit2)
{
return bit1 ^ bit2;
}
Далее из этих базовых элементов хочу моделировать RS - триггер
//************TRIGGERS**************
function trSmidt(r,s)
{
var param2 = AND_NOT(param1, s);
var param1 = AND_NOT(r, param2);
var q = new Array(param2, param1);
return q;
}
David Amirkhanov: кажется я вам в этом не помогу, зато можно обратиться к вике, в том числе и по поводу триггера Шмитта, например там можно подглядеть реализацию триггера Шмитта:
Вход, Верхний_порог, Нижний_порог - вещественные; //Верхний_порог > Нижний_порог
Триггер, Выход - булевые;
Задание значений Верхний_порог, Нижний_порог;
Триггер = 0; //Обозначения булевых переменных 0 и 1 это "ЛОЖЬ" и "ИСТИНА" соответственно
ЦИКЛ
//Например тут можно вставить условие выхода из цикла
ВВОД Вход;
ЕСЛИ Вход < Нижний_порог ТО Триггер = 0; Выход = 0; КОНЕЦ ЕСЛИ;
ЕСЛИ Вход >= Верхний_порог ТО Триггер = 1; Выход = 1; КОНЕЦ ЕСЛИ;
ЕСЛИ Вход < Верхний_порог И Вход >= Нижний_порог ТО
ЕСЛИ Триггер = 0 ТО Выход = 0 ИНАЧЕ Выход = 1 КОНЕЦ ЕСЛИ;
КОНЕЦ ЕСЛИ;
КОНЕЦ ЦИКЛА;
На вики конечно есть таблица истинности асинхронного RS-триггера( (0,1) -> (0,1), (1,0) -> (1,0), (0,0) -> (0,0), (1,1) -> (1,1) ), но я если честно не понял что она значит если половина состояний запрещены... К тому же, если верить вики, RS-триггер имеет смысл только в электронике, в программировании можно просто возвращать входные значения: