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