Search in sources :

Example 11 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class SldResolution method resolve.

public List<Node> resolve(Node node) {
    RuleSet ruleSet = Suite.newRuleSet(List.of("auto.sl", "pt.sl"));
    CompiledProverBuilder builder = CompiledProverBuilder.level1(new ProverConfig());
    Finder finder = builder.build(ruleSet).apply(Suite.parse(// 
    "" + // 
    "source .n0" + // 
    ", pt-prove0 .n0 .n1" + // 
    ", pt-prove1 .n1 .n2" + // 
    ", pt-prove2 .n2 .n3" + // 
    ", pt-prove3 .n3 .n4" + // 
    ", pt-prove4 .n4 .n5" + // 
    ", pt-prove5 .n5 ()/.n6" + ", sink .n6"));
    Node n0 = FindUtil.collectSingle(finder, node);
    Map<Node, Source<List<Node>>> orsMap = new HashMap<>();
    for (Node n1 : Tree.iter(n0, TermOp.AND___)) {
        List<Node> ors = To.list(Tree.iter(n1, TermOp.AND___));
        for (int i = 0; i < ors.size(); i++) {
            int index = i;
            orsMap.put(ors.get(index), () -> List_.concat(ors.subList(0, index), ors.subList(index + 1, ors.size())));
        }
    }
    List<Node> results = new ArrayList<>();
    for (Entry<Node, Source<List<Node>>> e : orsMap.entrySet()) {
        Source<List<Node>> value0 = e.getValue();
        Source<List<Node>> value1 = orsMap.get(negate(e.getKey()));
        if (value1 != null)
            results.add(Tree.of(TermOp.AND___, List_.concat(value0.source(), value1.source())));
    }
    return results;
}
Also used : RuleSet(suite.lp.kb.RuleSet) HashMap(java.util.HashMap) Node(suite.node.Node) Finder(suite.lp.search.ProverBuilder.Finder) ArrayList(java.util.ArrayList) Source(suite.util.FunUtil.Source) ProverConfig(suite.lp.Configuration.ProverConfig) ArrayList(java.util.ArrayList) List(java.util.List) CompiledProverBuilder(suite.lp.search.CompiledProverBuilder)

Example 12 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class RecursiveFactorizerTest method treeNode.

private Node treeNode(Source<Node> g, Node name, List<Node> nodes) {
    List<Node> pairs = Read.from(nodes).map(node -> pairNode(node, g.source())).toList();
    Dict dict = new Dict();
    dict.map.put(Atom.of("name"), Reference.of(name));
    dict.map.put(Atom.of("pairs"), Reference.of(Tree.of(TermOp.OR____, pairs)));
    return Tree.of(TermOp.COLON_, Atom.of(FTree.class.getName()), dict);
}
Also used : FNode(suite.node.parser.FactorizeResult.FNode) Read(suite.streamlet.Read) Singleton(suite.node.util.Singleton) Fun(suite.util.FunUtil.Fun) Node(suite.node.Node) FTree(suite.node.parser.FactorizeResult.FTree) FileUtil(suite.os.FileUtil) Nodify(suite.util.Nodify) Dict(suite.node.Dict) FPair(suite.node.parser.FactorizeResult.FPair) Reference(suite.node.Reference) Source(suite.util.FunUtil.Source) Assert.assertTrue(org.junit.Assert.assertTrue) TermOp(suite.node.io.TermOp) FTerminal(suite.node.parser.FactorizeResult.FTerminal) Test(org.junit.Test) To(suite.util.To) Tree(suite.node.Tree) Iterate(suite.util.FunUtil.Iterate) List(java.util.List) Rewrite(suite.node.util.Rewrite) Assert.assertFalse(org.junit.Assert.assertFalse) Atom(suite.node.Atom) Operator(suite.node.io.Operator) Assert.assertEquals(org.junit.Assert.assertEquals) Str(suite.node.Str) Dict(suite.node.Dict) FNode(suite.node.parser.FactorizeResult.FNode) Node(suite.node.Node)

Example 13 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class InterpretFunEager method eager.

public Node eager(Node node) {
    Node mode = isLazyify ? Atom.of("LAZY") : Atom.of("EAGER");
    Node query = Suite.substitute("source .in, fc-process-function .0 .in .out, sink .out", mode);
    RuleSet rs = Suite.newRuleSet(List.of("auto.sl", "fc/fc.sl"));
    Finder finder = new SewingProverBuilder2().build(rs).apply(query);
    Node parsed = FindUtil.collectSingle(finder, node);
    IntrinsicCallback ic = isLazyify ? lazyIntrinsicCallback() : Intrinsics.eagerIntrinsicCallback;
    Map<String, Node> df = new HashMap<>();
    df.put(TermOp.AND___.name, f2((a, b) -> Tree.of(TermOp.AND___, a, b)));
    df.put("+call%i-t1", f1(i -> fn(1, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+call%i-t2", f1(i -> fn(2, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+call%i-t3", f1(i -> fn(3, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+call%i-v1", f1(i -> fn(1, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+call%i-v2", f1(i -> fn(2, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+call%i-v3", f1(i -> fn(3, l -> Data.<Intrinsic>get(i).invoke(ic, l))));
    df.put("+compare", f2((a, b) -> Int.of(Comparer.comparer.compare(a, b))));
    df.put("+get%i", f1(a -> new Data<>(Intrinsics.intrinsics.get(((Atom) a).name.split("!")[1]))));
    df.put("+is-list", f1(a -> b(Tree.decompose(a) != null)));
    df.put("+is-pair", f1(a -> b(Tree.decompose(a) != null)));
    df.put("+lcons", f2((a, b) -> Tree.of(TermOp.OR____, a, b)));
    df.put("+lhead", f1(a -> Tree.decompose(a).getLeft()));
    df.put("+ltail", f1(a -> Tree.decompose(a).getRight()));
    df.put("+pcons", f2((a, b) -> Tree.of(TermOp.AND___, a, b)));
    df.put("+pleft", f1(a -> Tree.decompose(a).getLeft()));
    df.put("+pright", f1(a -> Tree.decompose(a).getRight()));
    for (Entry<Operator, IntInt_Bool> e : TreeUtil.boolOperations.entrySet()) {
        IntInt_Bool fun = e.getValue();
        df.put(e.getKey().getName(), f2((a, b) -> b(fun.apply(compare(a, b), 0))));
    }
    for (Entry<Operator, IntInt_Int> e : TreeUtil.intOperations.entrySet()) {
        IntInt_Int fun = e.getValue();
        df.put(e.getKey().getName(), f2((a, b) -> Int.of(fun.apply(i(a), i(b)))));
    }
    List<String> keys = df.keySet().stream().sorted().collect(Collectors.toList());
    Eager_ eager0 = new Eager_(0, IMap.empty());
    Frame frame = new Frame(null);
    for (String key : keys) {
        eager0 = eager0.put(Atom.of(key));
        frame.add(df.get(key));
    }
    return eager0.eager_(parsed).apply(frame);
}
Also used : IntInt_Bool(suite.node.util.TreeUtil.IntInt_Bool) APPLY(suite.fp.match.Matchers.APPLY) DECONS(suite.fp.match.Matchers.DECONS) Fun(suite.util.FunUtil.Fun) BinOp(suite.util.FunUtil2.BinOp) Node(suite.node.Node) BOOLEAN(suite.fp.match.Matchers.BOOLEAN) VAR(suite.fp.match.Matchers.VAR) Map(java.util.Map) FindUtil(suite.lp.search.FindUtil) RuleSet(suite.lp.kb.RuleSet) NUMBER(suite.fp.match.Matchers.NUMBER) ERROR(suite.fp.match.Matchers.ERROR) IntrinsicCallback(suite.fp.intrinsic.Intrinsics.IntrinsicCallback) TREE(suite.fp.match.Matchers.TREE) IMap(suite.immutable.IMap) FUN(suite.fp.match.Matchers.FUN) To(suite.util.To) Intrinsic(suite.fp.intrinsic.Intrinsics.Intrinsic) Collectors(java.util.stream.Collectors) Matcher(suite.fp.match.Matcher) PRAGMA(suite.fp.match.Matchers.PRAGMA) Tree(suite.node.Tree) UNWRAP(suite.fp.match.Matchers.UNWRAP) IntInt_Int(suite.primitive.IntInt_Int) Iterate(suite.util.FunUtil.Iterate) Pair(suite.adt.pair.Pair) List(java.util.List) Entry(java.util.Map.Entry) Int(suite.node.Int) TreeUtil(suite.node.util.TreeUtil) IF(suite.fp.match.Matchers.IF) SewingProverBuilder2(suite.lp.search.SewingProverBuilder2) Comparer(suite.node.util.Comparer) HashMap(java.util.HashMap) TCO(suite.fp.match.Matchers.TCO) ArrayList(java.util.ArrayList) CONS(suite.fp.match.Matchers.CONS) Data(suite.node.Data) Formatter(suite.node.io.Formatter) Intrinsics(suite.fp.intrinsic.Intrinsics) DEFVARS(suite.fp.match.Matchers.DEFVARS) Suite(suite.Suite) Source(suite.util.FunUtil.Source) Finder(suite.lp.search.ProverBuilder.Finder) Pattern(suite.BindArrayUtil.Pattern) TermOp(suite.node.io.TermOp) ATOM(suite.fp.match.Matchers.ATOM) WRAP(suite.fp.match.Matchers.WRAP) CHARS(suite.fp.match.Matchers.CHARS) Atom(suite.node.Atom) Operator(suite.node.io.Operator) Fail(suite.util.Fail) Str(suite.node.Str) Operator(suite.node.io.Operator) RuleSet(suite.lp.kb.RuleSet) IntrinsicCallback(suite.fp.intrinsic.Intrinsics.IntrinsicCallback) HashMap(java.util.HashMap) Node(suite.node.Node) Finder(suite.lp.search.ProverBuilder.Finder) SewingProverBuilder2(suite.lp.search.SewingProverBuilder2) Data(suite.node.Data) Atom(suite.node.Atom) IntInt_Int(suite.primitive.IntInt_Int) Intrinsic(suite.fp.intrinsic.Intrinsics.Intrinsic) IntInt_Bool(suite.node.util.TreeUtil.IntInt_Bool)

Example 14 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class FileUtil method findFiles.

public static Source<File> findFiles(File file) {
    Deque<File> stack = new ArrayDeque<>();
    stack.push(file);
    return new Source<File>() {

        public File source() {
            while (!stack.isEmpty()) {
                File f = stack.pop();
                if (f.isDirectory())
                    for (File child : f.listFiles()) stack.push(child);
                else
                    return f;
            }
            return null;
        }
    };
}
Also used : File(java.io.File) ArrayDeque(java.util.ArrayDeque) Source(suite.util.FunUtil.Source)

Example 15 with Source

use of suite.util.FunUtil.Source in project suite by stupidsing.

the class Prover method expand.

/**
 * Expands an user predicate (with many clauses) to a chain of logic.
 *
 * @param query
 *            The invocation pattern.
 * @return The chained node.
 */
private Node expand(Node query) {
    Node alt0 = alt;
    Data<Source<Boolean>> cut = new Data<>(() -> {
        alt = alt0;
        return Boolean.TRUE;
    });
    return expandClauses(query, cut, config.ruleSet().searchRule(query));
}
Also used : Node(suite.node.Node) Data(suite.node.Data) Source(suite.util.FunUtil.Source)

Aggregations

Source (suite.util.FunUtil.Source)19 Node (suite.node.Node)9 Fun (suite.util.FunUtil.Fun)8 Fail (suite.util.Fail)7 Iterator (java.util.Iterator)6 LogUtil (suite.os.LogUtil)6 Sink (suite.util.FunUtil.Sink)6 Thread_ (suite.util.Thread_)6 Collections (java.util.Collections)5 List (java.util.List)5 Data (suite.node.Data)5 Tree (suite.node.Tree)5 Source2 (suite.util.FunUtil2.Source2)5 NullableSyncQueue (suite.util.NullableSyncQueue)5 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)4 RuleSet (suite.lp.kb.RuleSet)4 Map (java.util.Map)3 Test (org.junit.Test)3 Pair (suite.adt.pair.Pair)3