feat(prolog): Atom unification
This commit is contained in:
parent
8429733200
commit
39c3af4ba5
5 changed files with 47 additions and 0 deletions
5
src/prolog/Result.kt
Normal file
5
src/prolog/Result.kt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package prolog
|
||||||
|
|
||||||
|
import prolog.terms.Variable
|
||||||
|
|
||||||
|
data class Result(val success: Boolean, val substitutions: List<Variable>)
|
3
src/prolog/terms/Atom.kt
Normal file
3
src/prolog/terms/Atom.kt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package prolog.terms
|
||||||
|
|
||||||
|
data class Atom(val name: String): Term()
|
3
src/prolog/terms/Term.kt
Normal file
3
src/prolog/terms/Term.kt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package prolog.terms
|
||||||
|
|
||||||
|
sealed class Term
|
7
src/prolog/unify.kt
Normal file
7
src/prolog/unify.kt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package prolog
|
||||||
|
|
||||||
|
import prolog.terms.Term
|
||||||
|
|
||||||
|
fun unify(term1: Term, term2: Term): Result {
|
||||||
|
return Result(term1 == term2, emptyList())
|
||||||
|
}
|
29
tests/prolog/unifyTest.kt
Normal file
29
tests/prolog/unifyTest.kt
Normal file
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue