gpt4 book ai didi

java - Łukasiewicz 谓词逻辑?

转载 作者:搜寻专家 更新时间:2023-11-01 03:01:10 25 4
gpt4 key购买 nike

有没有办法用 Java API 模拟 Łukasiewicz 的三值逻辑?

更具体地说,我想效仿 Łukasiewicz' 'M' ("it is not false that...")运营商。

例如我需要构建这个 Predicate<String>结果如下:

predicate.test("0") = false
predicate.test(null) = true
predicate.test("1") = true

当取反时,给出:

predicate.negate().test("0") = true
predicate.negate().test(null) = true
predicate.negate().test("1") = false

如果要测试的值是A ,我的谓词计算MA .什么negate()做的是计算¬MA而我希望它计算 M¬A .

附言不要费心用 Predicate 的三值替换来找出答案用 boolean 的三值替换,因为我很清楚自己该怎么做。我问这个问题是为了确定是否可以使用纯 Java8 并花费最少的额外编码工作。

最佳答案

看起来这就是你想要的:

static <T> Predicate<T> p(Predicate<? super T> o){ //(I'm not sure what to name this)
return new Predicate<T>(){
@Override
public boolean test(T t) {
return t == null || o.test(t);
}
@Override
public Predicate<T> negate(){
return p(o.negate());
}
};
}
....
Predicate<String> predicate = p(t -> !"0".equals(t));

如果要测试的值为 null,我们返回 true,否则我们使用原始谓词。要否定我们只是否定原始谓词。


如果 null 并不总是第三个值,您可以传入另一个谓词来测试它:

static <T> Predicate<T> p(Predicate<? super T> isUnknown, Predicate<? super T> isTrue){
return new Predicate<T>(){
@Override
public boolean test(T t) {
return isUnknown.test(t) || isTrue.test(t);
}
@Override
public Predicate<T> negate(){
return p(isUnknown, isTrue.negate());
}
};
}

关于java - Łukasiewicz 谓词逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33982052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com