Skip to content

Commit e2baeb4

Browse files
committed
refactor(dsl)!: visitors are now sigletons
1 parent 11e7e84 commit e2baeb4

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

src/main/scala/io/github/kelvindev15/prolog/visitors/BinaryToFlatVisitor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import io.github.kelvindev15.prolog.core.Term
77
/** Linearizes a [[BinaryRecursiveStruct]], e.g a ','(a, ','(b, ','(c, [])))
88
* becomes [a, b, c].
99
*/
10-
class BinaryToFlatVisitor extends TermVisitor[Seq[Term]]:
10+
object BinaryToFlatVisitor extends TermVisitor[Seq[Term]]:
1111
override def visit(tuple: BinaryRecursiveStruct): Seq[Term] = tuple match
1212
case Tuple(l, r @ Tuple(_, _)) => Seq(l) ++ visit(r)
1313
case Tuple(l, r) => Seq(l, r)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.github.kelvindev15.prolog.visitors
2+
3+
import io.github.kelvindev15.prolog.core.{Constant, PrologList, Struct, Term, Variable}
4+
import io.github.kelvindev15.prolog.solver.Solver.Substitution
5+
6+
class ToInstanceTermVisitor(substitution: Substitution) extends TermVisitor[Term]:
7+
override def visit(struct: Struct): Term = struct match
8+
case l: PrologList => visit(l)
9+
case _ => Struct(struct.functor, struct.arguments.map(visit)*)
10+
override def visit(list: PrologList): Term = PrologList(list.linearizedArguments.map(visit)*)
11+
override def visit(variable: Variable): Term = substitution.getOrElse(variable, variable)
12+
override def visit(atom: Constant.Atom): Term = atom

src/main/scala/io/github/kelvindev15/prolog/visitors/ToStringTermVisitor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import io.github.kelvindev15.prolog.core.RecursiveStruct.BinaryRecursiveStruct
55
import io.github.kelvindev15.prolog.core.Struct.Clause
66
import io.github.kelvindev15.prolog.core.*
77

8-
class ToStringTermVisitor extends TermVisitor[String]:
8+
object ToStringTermVisitor extends TermVisitor[String]:
99

1010
override def visit(atom: Constant.Atom): String = atom.value
1111
override def visit(numeric: Constant.Numeric): String = numeric.value.toString

0 commit comments

Comments
 (0)