Loge: Prolog smoke test
root = Path.expand("..", __DIR__)
Mix.install([
{:loge, path: Path.join(root, "loge"), override: true},
{:loge_prolog, path: Path.join(root, "loge_prolog")},
{:kino_loge, path: Path.join(root, "kino_loge")}
])
Solving
Expected: true, a table with Z = ann and pat.
Loge.run!(
Loge.Prolog.Engines.Swipl,
"parent(tom, bob).\nparent(tom, liz).\nparent(bob, ann).\nparent(bob, pat).\n\ngrandparent(X, Z) :- parent(X, Y), parent(Y, Z).\n",
goal: "grandparent(tom, Z)",
answers: 0,
time_limit: 10
)
Expected: false, no table.
Loge.run!(
Loge.Prolog.Engines.Swipl,
"parent(tom, bob).\nparent(tom, liz).\nparent(bob, ann).\nparent(bob, pat).\n\ngrandparent(X, Z) :- parent(X, Y), parent(Y, Z).\n",
goal: "grandparent(ann, _)",
answers: 1,
time_limit: 10
)
What the program prints is the Output tab. Expected: true, Output hello, world.
Loge.run!(Loge.Prolog.Engines.Swipl, "greet(Name) :- format(\"hello, ~w~n\", [Name]).\n",
goal: "greet(world)",
answers: 1,
time_limit: 10
)
Expected: Timeout after two seconds.
Loge.run!(Loge.Prolog.Engines.Swipl, "loop :- loop.\n", goal: "loop", answers: 1, time_limit: 2)
Linting
Expected: under the editor, Y is a singleton (warning, on Y) and line 3 has a syntax
error; evaluating raises Loge.Error with the syntax error.
Loge.run!(Loge.Prolog.Engines.Swipl, "p(X) :- q(X, Y).\nq(a, b).\nr( :- s.\n",
goal: "p(a)",
answers: 1,
time_limit: 10
)