diff --git a/src/prolog/Result.kt b/src/prolog/Result.kt new file mode 100644 index 0000000..faf302d --- /dev/null +++ b/src/prolog/Result.kt @@ -0,0 +1,5 @@ +package prolog + +import prolog.terms.Variable + +data class Result(val success: Boolean, val substitutions: List) diff --git a/src/prolog/terms/Atom.kt b/src/prolog/terms/Atom.kt new file mode 100644 index 0000000..f401895 --- /dev/null +++ b/src/prolog/terms/Atom.kt @@ -0,0 +1,3 @@ +package prolog.terms + +data class Atom(val name: String): Term() diff --git a/src/prolog/terms/Term.kt b/src/prolog/terms/Term.kt new file mode 100644 index 0000000..10e1f0a --- /dev/null +++ b/src/prolog/terms/Term.kt @@ -0,0 +1,3 @@ +package prolog.terms + +sealed class Term diff --git a/src/prolog/unify.kt b/src/prolog/unify.kt new file mode 100644 index 0000000..6387c99 --- /dev/null +++ b/src/prolog/unify.kt @@ -0,0 +1,7 @@ +package prolog + +import prolog.terms.Term + +fun unify(term1: Term, term2: Term): Result { + return Result(term1 == term2, emptyList()) +} diff --git a/tests/prolog/unifyTest.kt b/tests/prolog/unifyTest.kt new file mode 100644 index 0000000..c93e010 --- /dev/null +++ b/tests/prolog/unifyTest.kt @@ -0,0 +1,29 @@ +package prolog + +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Test +import prolog.terms.Atom + +class unifyTest { + @Test + fun identical_atoms_unify() { + val atom1 = Atom("a") + val atom2 = Atom("a") + + val result = unify(atom1, atom2) + + assertTrue(result.success) + assertEquals(0, result.substitutions.size) + } + + @Test + fun different_atoms_do_not_unify() { + val atom1 = Atom("a") + val atom2 = Atom("b") + + val result = unify(atom1, atom2) + + assertFalse(result.success) + assertEquals(0, result.substitutions.size) + } +} \ No newline at end of file