标签: predicate

Prolog中的谓词控制

对Prolog谓词控制有好奇心.

据说我有一个谓词f(A,X)和g(B).

f(A,X):- a,b,c, g(X).
g(B):- true.

a - returns true
b - returns true.
c - returns false.
where a,b and c are random predicates.
Run Code Online (Sandbox Code Playgroud)

如果c返回false,我如何继续g(X)在谓词中进行求值f(A,X)

predicate prolog

9
推荐指数
1
解决办法
1万
查看次数

Python中的Pointfree函数组合

我有一些谓词,例如:

is_divisible_by_13 = lambda i: i % 13 == 0
is_palindrome = lambda x: str(x) == str(x)[::-1]
Run Code Online (Sandbox Code Playgroud)

并希望在逻辑上将它们组合在一起,如:

filter(lambda x: is_divisible_by_13(x) and is_palindrome(x), range(1000,10000))
Run Code Online (Sandbox Code Playgroud)

现在的问题是:这种组合可以用无样式编写,例如:

filter(is_divisible_by_13 and is_palindrome, range(1000,10000))
Run Code Online (Sandbox Code Playgroud)

这当然不具有期望的效果,因为λ函数的真值是Trueand并且or是短路运算符.我想出的最接近的事情是定义一个类P,它是一个简单的谓词容器,它实现__call__()并拥有方法and_()or_()组合谓词.定义P如下:

import copy

class P(object):
    def __init__(self, predicate):
        self.pred = predicate

    def __call__(self, obj):
        return self.pred(obj)

    def __copy_pred(self):
        return copy.copy(self.pred)

    def and_(self, predicate):
        pred = self.__copy_pred()
        self.pred = lambda x: pred(x) and predicate(x) …
Run Code Online (Sandbox Code Playgroud)

python predicate pointfree function-composition

9
推荐指数
1
解决办法
2514
查看次数

如何根据条目集过滤地图条目

我正在使用谷歌番石榴12并有一张地图:

Map<OccupancyType, BigDecimal> roomPrice;
Run Code Online (Sandbox Code Playgroud)

我有一套:

Set<OccupancyType> policy;
Run Code Online (Sandbox Code Playgroud)

如何过滤roomPrice map基于的条目policy并返回过滤后的地图?

filteredMap需要拥有所有的价值policy.如果roomPrice地图没有来自策略的条目,我想改为输入默认值.

java predicate map set guava

9
推荐指数
1
解决办法
2万
查看次数

HowTo为对象创建谓词深入几个关系?核心数据iOS Swift

我有一个相当棘手的问题,我还没有找到答案,并希望你能帮忙!我的情况是这样的:我在Core Data中有以下对象模型

场景< - >>字符< - >>线条

实体具有以下关系:Scenes-> toCharacters-> Characters-> toLines-> Lines

我想要完成的是获取所有存在实际拥有行的字符的场景.

我读过的每篇文章都只谈到了"走图"这个问题,而且这个工作有效,但并不是一直到有线实体.

例如,这个谓词工作正常,深入一级并检索包含字符的所有场景:

    let scene_ent:NSEntityDescription = NSEntityDescription.entityForName("Scenes", inManagedObjectContext: context)

    scenerequest.entity = scene_ent

    let predicate:NSPredicate = NSPredicate(format: "toCharacters.@count > 0")        
    scenerequest.predicate = predicate
Run Code Online (Sandbox Code Playgroud)

当我尝试修改谓词而不是检索包含具有行的字符的所有场景时:

    let predicate:NSPredicate = NSPredicate(format: "toCharacters.Characters.toLines.@count > 0")   
Run Code Online (Sandbox Code Playgroud)

我收到错误'Unsupported function expression count:(toCharacters.Characters.toLines)'

我在这里缺少一些非常简单的东西吗?

谢谢!

predicate core-data ios swift

9
推荐指数
1
解决办法
4063
查看次数

使用Set <String>和String作为参数创建自定义谓词

我有一个String"ishant"和一个Set<String>["Ishant","Gaurav","sdnj"].我需要为此编写谓词.我尝试过如下代码,但它无法正常工作

Predicate<Set<String>,String> checkIfCurrencyPresent = (currencyList,currency) -> currencyList.contains(currency);
Run Code Online (Sandbox Code Playgroud)

如何创建一个Predicate将采取Set<String>String作为参数,并可以给结果呢?

java predicate java-8 functional-interface

9
推荐指数
2
解决办法
209
查看次数

Find whether a tree is a binary search tree in Haskell

  type BSTree a = BinaryTree a

  data BinaryTree a = Null | Node (BinaryTree a) a (BinaryTree a)
                      deriving Show

  flattenTree :: BinaryTree a -> [a]
  flattenTree  tree = case tree of
      Null -> []
      Node left val right -> (flattenTree left) ++ [val] ++ (flattenTree right)

  isBSTree :: (Ord a) => BinaryTree a -> Bool
  isBSTree btree = case btree of
      Null -> False
      tree -> (flattenTree tree) == sort (flattenTree tree)
Run Code Online (Sandbox Code Playgroud)

我想做的是编写一个函数来确定给定的树是否是二叉搜索树,我的方法是将所有值分组到一个列表中并导入Data.List,然后对列表进行排序以查找它们是否相等,但是有点复杂。我们可以不导入其他模块就能做到吗?

tree binary-tree haskell predicate binary-search-tree

9
推荐指数
3
解决办法
312
查看次数

如何将谓词作为函数参数传递

我有一个类CMyVector,它包含一个指向CMyClass对象的指针向量,我有几个"查找"函数,可以根据不同的标准查找元素.例如,我有:

CMyClass* CMyVector::FindByX(int X);
CMyClass* CMyVector::FindByString(const CString& str);
CMyClass* CMyVector::FindBySomeOtherClass(CSomeOtherClass* ptr);
// Other find functions...
Run Code Online (Sandbox Code Playgroud)

首先,它们被实现为循环,遍历向量,寻找匹配X,str,ptr或其他的元素.所以我创建了谓词,就像这样:

class IsSameX:public unary_function<CMyClass*, bool>
{
    int num;
public:
    IsSameX(int n):num(n){}
    bool operator()(CMyClass* obj) const 
    { 
        return (obj != NULL && (obj->X() == num)); 
    }
};
Run Code Online (Sandbox Code Playgroud)

并以一堆看起来像这样的函数结束:

CMyClass* CMyVector::FindByX( int x )
{
    CMyVector::iterator it = find_if(vec.begin(), vec.end(), IsSameX(x));
    if (it != vec.end())
    {
        return *it;
    }
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

它们看起来都是一样的,除了被调用的谓词,所以我想到了简化更多,并创建了一个像这样的函数:

CMyClass* CMyVector::Find( ThisIsWhatIDontKnow Predicate)
{
    CMyVector::iterator it = find_if(vec.begin(), vec.end(), …
Run Code Online (Sandbox Code Playgroud)

c++ stl predicate vector std

8
推荐指数
1
解决办法
4982
查看次数

在Prolog中谓词名后面斜杠的含义是什么?

我已经读过SO问题斜杠(/)在prolog中做了什么?什么是序言(SWI-Prolog的)谓词"简单/ 1"的含义,但这些链接似乎并没有帮助我.

我正在学习一些关于Prolog的初学者教程.短语喜欢Solve/4Go/1困惑我.这个斜线和数字是什么意思?

predicate prolog

8
推荐指数
1
解决办法
2083
查看次数

Prolog:如何判断谓词是否具有确定性

因此,根据我对确定性谓词的理解:

确定性谓词= 1解

非确定性谓词=多个解决方案

是否有任何类型的规则可以检测谓词是一个还是另一个?喜欢看搜索树等

deterministic predicate prolog

8
推荐指数
1
解决办法
2458
查看次数

(谓词<?super String> s)或(String s)

我有一个TreeSet字符串(硬编码).想要检查给定的参数String例如."Person"如果存在于TreeSet中则返回true否则返回false.

在这里我对关于(Predicate<? super String> s)vs 的Eclipse消息感到困惑 (String s):

类型Stream中的方法anyMatch(Predicate)不适用于参数(String)

请指导.

import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;

public class SystemLabelValidator {

    public static boolean ValidateSystemLabel( String s) {  

        String j = s;

        boolean b = false;

        Set <String> SystemLabels = new TreeSet<String>();
        // Unique Strings
        SystemLabels.add("Person");
        SystemLabels.add("Player");
        SystemLabels.add("Hospital");
        SystemLabels.add("Nurse");
        SystemLabels.add("Room");

        System.out.println("\n==> Loop here.");
        for (String temp : SystemLabels) {
            System.out.println(temp);

            if(SystemLabels.stream().anyMatch(j)) {
                System.out.println("I need to return Boolean");
            }
            return b;
        }
        return …
Run Code Online (Sandbox Code Playgroud)

java string predicate java-8 java-stream

8
推荐指数
1
解决办法
272
查看次数