Fix double printing

This commit is contained in:
Tibo De Peuter 2025-04-30 10:52:58 +02:00
parent bfb509f41f
commit 1e087c8339
Signed by: tdpeuter
GPG key ID: 38297DE43F75FFE2
3 changed files with 12 additions and 6 deletions

View file

@ -1,11 +1,8 @@
import com.sun.org.apache.bcel.internal.util.Args
import com.xenomachina.argparser.ArgParser import com.xenomachina.argparser.ArgParser
import com.xenomachina.argparser.mainBody import com.xenomachina.argparser.mainBody
import interpreter.FileLoader import interpreter.FileLoader
import io.GhentPrologArgParser import io.GhentPrologArgParser
import io.Logger import io.Logger
import prolog.Program
import prolog.ast.logic.Clause
import repl.Repl import repl.Repl
fun main(args: Array<String>) = mainBody { fun main(args: Array<String>) = mainBody {

View file

@ -2,6 +2,7 @@ package interpreter
import io.Logger import io.Logger
import prolog.ast.arithmetic.Expression import prolog.ast.arithmetic.Expression
import prolog.ast.arithmetic.Integer
import prolog.ast.logic.Clause import prolog.ast.logic.Clause
import prolog.ast.logic.Fact import prolog.ast.logic.Fact
import prolog.ast.logic.LogicOperand import prolog.ast.logic.LogicOperand
@ -56,6 +57,8 @@ open class Preprocessor {
Structure(Atom("fail"), emptyList()) -> Fail Structure(Atom("fail"), emptyList()) -> Fail
Atom("!") -> Cut() Atom("!") -> Cut()
Structure(Atom("!"), emptyList()) -> Cut() Structure(Atom("!"), emptyList()) -> Cut()
Atom("inf") -> Integer(Int.MAX_VALUE)
Atom("nl") -> Nl
is Structure -> { is Structure -> {
// Preprocess the arguments first to recognize builtins // Preprocess the arguments first to recognize builtins
val args = term.arguments.map { preprocess(it) } val args = term.arguments.map { preprocess(it) }
@ -115,6 +118,10 @@ open class Preprocessor {
Between(args[0] as Expression, args[1] as Expression, args[2] as Expression) Between(args[0] as Expression, args[1] as Expression, args[2] as Expression)
} }
// Other
term.functor == "write/1" -> Write(args[0])
term.functor == "read/1" -> Read(args[0])
else -> term else -> term
} }
} }

View file

@ -24,19 +24,21 @@ class Repl {
} }
fun query(): Answers { fun query(): Answers {
val queryString = io.prompt("?-", { "" }) val queryString = io.prompt("?-", { "| " })
val simpleQuery = parser.parse(queryString) val simpleQuery = parser.parse(queryString)
val query = preprocessor.preprocess(simpleQuery) val query = preprocessor.preprocess(simpleQuery)
Logger.debug("Satisfying query: $query")
return query.satisfy(emptyMap()) return query.satisfy(emptyMap())
} }
fun printAnswers(answers: Answers) { fun printAnswers(answers: Answers) {
val knownCommands = setOf(";", "a", ".", "h") val knownCommands = setOf(";", "a", ".", "h")
if (answers.none()) { val iterator = answers.iterator()
if (!iterator.hasNext()) {
io.say("false.") io.say("false.")
} else { } else {
val iterator = answers.iterator()
var previous = iterator.next() var previous = iterator.next()
io.say(prettyPrint(previous)) io.say(prettyPrint(previous))