コード例 #1
0
ファイル: test_learnprolognow.py プロジェクト: EdTsft/swilite
    def test_knowledge_database_2(self):
        self.dynamic(Term.from_functor(happy))
        self.dynamic(Term.from_functor(listens_2_music))
        self.dynamic(Term.from_functor(plays_air_guitar))

        self.assertz(happy(yolanda))
        self.assertz(listens_2_music(mia))
        self.assertz(self.rule(listens_2_music(yolanda), happy(yolanda)))
        self.assertz(self.rule(plays_air_guitar(mia), listens_2_music(mia)))
        self.assertz(self.rule(plays_air_guitar(yolanda),
                               listens_2_music(yolanda)))

        assert_true(plays_air_guitar(mia)())
コード例 #2
0
ファイル: test_learnprolognow.py プロジェクト: EdTsft/swilite
    def test_knowledge_database_4(self):
        self.retractall(woman(Term()))
        self.retractall(loves(Term(), Term()))

        self.dynamic(Term.from_functor(woman))
        self.dynamic(Term.from_functor(loves))

        self.assertz(woman(mia))
        self.assertz(woman(jody))
        self.assertz(woman(yolanda))

        self.assertz(loves(vincent, mia))
        self.assertz(loves(marcellus, mia))
        self.assertz(loves(pumpkin, honey_bunny))
        self.assertz(loves(honey_bunny, pumpkin))

        with Frame() as f:
            X = f.term()
            # Creates a compound term: woman(X)
            # Then evaluates that compound term like once(woman(X))
            # Finds the first solution.
            woman(X)()
            assert_equal(X, mia)

        with Frame() as f:
            # Do the same thing by calling a predicate instead of evaluating
            # a compound term.
            # Creates the predicate `woman` then evaluates it with the argument
            # `X`. Again, finds the first solution.
            X = f.term()
            Predicate(woman)(X)
            assert_equal(X, mia)

            # Use a query to find all solutions.
        with Frame() as f:
            X = f.term()
            with Query(Predicate(woman), X) as q:
                q.next_solution()
                assert_equal(X, mia)
                q.next_solution()
                assert_equal(X, jody)
                q.next_solution()
                assert_equal(X, yolanda)
                assert_false(q.next_solution())

        with Frame() as f:
            X = f.term()
            assert_true((loves(marcellus, X) & woman(X))())
            assert_equal(X, mia)
コード例 #3
0
ファイル: test_learnprolognow.py プロジェクト: EdTsft/swilite
    def test_knowledge_database_3(self):
        self.dynamic(Term.from_functor(happy))
        self.dynamic(Term.from_functor(listens_2_music))
        self.dynamic(Term.from_functor(plays_air_guitar))

        self.assertz(happy(vincent))
        self.assertz(listens_2_music(butch))
        self.assertz(self.rule(plays_air_guitar(vincent),
                               (listens_2_music(vincent) & happy(vincent))))
        self.assertz(self.rule(plays_air_guitar(butch), happy(butch)))
        self.assertz(self.rule(plays_air_guitar(butch),
                               listens_2_music(butch)))

        assert_false(plays_air_guitar(vincent)())
        assert_true(plays_air_guitar(butch)())
コード例 #4
0
ファイル: test_learnprolognow.py プロジェクト: EdTsft/swilite
    def test_knowledge_database_1(self):
        self.dynamic(Term.from_functor(woman))
        self.dynamic(rock_concert)
        self.assertz(woman(mia))
        self.assertz(woman(jody))
        self.assertz(woman(yolanda))
        self.assertz(plays_air_guitar(jody))
        self.assertz(party)

        assert_true(woman(mia)())
        assert_true(woman(jody)())
        assert_true(woman(yolanda)())
        assert_false(woman(Term.from_atom_name('bob'))())

        once = Functor('once', 1)
        once_pred = Predicate(once)
        assert_true(once_pred(woman(mia)))
        once_pred(woman(mia), check=True)
        assert_false(once_pred(woman(Term.from_atom_name('bob'))))

        assert_true(plays_air_guitar(jody)())
        assert_false(plays_air_guitar(mia)())

        assert_true(party())
        assert_false(Term.from_atom_name('rockConcert')())