Является ли Clojure логическим and
отличным от нормального логического and
(& &)? Почему это дает значениеЛогические И в Clojure
((and odd? #(> 10 %)) 6)
and
Нужно ли 2 истинных оператора для возврата true?
Является ли Clojure логическим and
отличным от нормального логического and
(& &)? Почему это дает значениеЛогические И в Clojure
((and odd? #(> 10 %)) 6)
and
Нужно ли 2 истинных оператора для возврата true?
and
необязательно возвращается true
. Он фактически возвращает false
или nil
, если какой-либо из данных элементов false
или nil
. Если ни один из них не существует, он возвращает самый последний элемент (он не возвращает true).
В вашем случае and
возвращает функцию #(> 10 %)
(и ничего больше), которая затем применяется к 6
, которая возвращает true. Это связано с тем, что обе функции не являются nil
или false
. Это как шаги будут работать:
((and odd? #(> 10 %)) 6)
(#(> 10 %) 6)
;; => true
То, что вы ищете, чтобы составить предикатные функции:
((every-pred odd? #(> 10 %)) 6) ;; => false
FYI: Существует также это дополнение «or
»: some-fn
.
Но '(нечетное? 6)' Неверно. Почему он переходит к следующему выражению? Согласно определению логического и возвращает false, если его первый элемент возвращает false. – amirteymuri
Это означает, что 'и' не оценивает (так, как я написал код) '(odd? 6)' AND '(> 10 6)'? Но вместо этого выглядит буквально для 'false' или' nil'? – amirteymuri
'и' не знает о '6' и не выполняет функции. Если вы хотите создавать функции, у вас есть 'every-pred' и это дополнение' some-fn' – ClojureMostly