Powered by AppSignal & Oban Pro

Loge: Prolog smoke test

notebooks/prolog.livemd

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
)