示例#1
0
    def __getitem__(self, args):
        assert len(self.variable_list)>1
        # 1. map args to var-nodes

        arg_list = remove_tuples(args)
        self.env.push_new_frame(self.variable_list)
        unset = len(self.variable_list)
        for i in range(len(arg_list)):
            idNode = self.variable_list[i]
            atype = self.env.get_type_by_node(idNode)
            value = build_arg_by_type(atype, arg_list)
            self.env.set_value(idNode.idName, value)
            unset = unset -1
        # TODO: 2. compute missing bound variables 
        # only implemented one case: {P(x,y)}(x) returning y
        if not unset==1:
            print unset, "unset bound variables:", [x.idName for x in self.variable_list[unset:]]
            raise NotImplementedError()
        from enumeration import try_all_values
        result = None
        for possible in try_all_values(self.predicate, self.env, self.variable_list[unset:]):
            if possible:
                result = self.env.get_value(self.variable_list[-1].idName)
        self.env.pop_frame() # exit scope
        return result    
示例#2
0
 def __contains__(self, args):
     args = remove_tuples(args)
     varList = self.variable_list
     self.env.push_new_frame(varList)
     #print len(varList), varList
     for i in range(len(varList)):
         idNode = varList[i]
         # type needed to map args to value
         atype = self.env.get_type_by_node(idNode)
         value = build_arg_by_type(atype, args)
         self.env.set_value(idNode.idName, value)
     result = self.interpret(self.predicate, self.env) 
     self.env.pop_frame() # exit scope
     if USE_RPYTHON_CODE:
         return result.bvalue
     return result  
示例#3
0
 def __contains__(self, args):
     args = remove_tuples(args)
     varList = self.variable_list
     self.env.push_new_frame(varList) 
     for i in range(len(varList)):
         idNode = varList[i]
         atype = self.env.get_type_by_node(idNode)
         value = build_arg_by_type(atype, args)
         self.env.set_value(idNode.idName, value)
     domain_value = self.interpret(self.predicate, self.env)
     image_value  = self.interpret(self.expression, self.env) 
     self.env.pop_frame() # exit scope
     if USE_RPYTHON_CODE:
         return domain_value.bvalue and image_value.__eq__(args[-1])
     else:
         return domain_value and image_value==args[-1]