Примитивный тип Boolean в Maxima

Я очень новичок в Maxima, но я знаю Java. Мне нужно написать функцию Maxima, которая написана на Java следующим образом:

private boolean isEchelon() {
    for (int i = 0; i < headElementColumnIndexes.length; i++) {
        int current = headElementColumnIndexes[i];
        for (int j = i + 1; j < headElementColumnIndexes.length; j++)
            if (current == headElementColumnIndexes[j])
                return false;
    }
    return true;
}

Можно ли вообще написать функцию, которая возвращает логическое значение в Maxima? Могу я попросить несколько примеров?


person Dominika    schedule 12.03.2016    source источник
comment
Мне приходит в голову только одно решение: 1=true, 0=false... . И сделайте блок с этим возвращаемым значением int. Но все равно... . Мне интересно, есть ли что-то другое.   -  person Dominika    schedule 12.03.2016


Ответы (1)


Да, это возможно. Максимумы, встроенные в логические функции, называются предикатами и (обычно) заканчиваются на «p». Примеры:

(%i1) integerp (0);
(%o1)               true
(%i2) integerp (%pi);
(%o2)               false

Вы также можете написать свои собственные предикаты.

(%i1) even_prime(n) := evenp(n) and primep(n);
(%o1)             even_prime(n) := evenp(n) and primep(n)
(%i2) even_prime(3);
(%o2)                              false
(%i3) even_prime(2);
(%o3)                              true

Сначала может быть проще явно вернуть логические значения, так как это ближе к синтаксису java.

(%i1) even_prime(n) := if evenp(n) and primep(n) then true else false;
(%o1)      even_prime(n) := if evenp(n) and primep(n) then true else false;
(%i2) even_prime(4);
(%o2)                              false

Особенностью Maxima является то, что бинарные числовые отношения (=,< и т. д.) не возвращают логическое значение.

(%i1) 4 = 5;
(%o1)                              4 = 5
(%i2) 5 > 3;
(%o2)                              5 > 3

Чтобы заставить такие отношения оценивать логическое значение, используйте функцию is.

(%i1) is (4 = 5);
(%o1)                              false
(%i2) is (5 > 3);
(%o2)                              true
person austinlorenz    schedule 12.03.2016