From 88c90220feff1f79d10947ae6f21ac9b23e31a92 Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Fri, 9 May 2025 10:30:51 +0200 Subject: [PATCH] WriteLn --- src/interpreter/Preprocessor.kt | 1 + src/prolog/builtins/ioOperators.kt | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/interpreter/Preprocessor.kt b/src/interpreter/Preprocessor.kt index 79c2c5b..5088012 100644 --- a/src/interpreter/Preprocessor.kt +++ b/src/interpreter/Preprocessor.kt @@ -148,6 +148,7 @@ open class Preprocessor { // IO Functor.of("write/1") -> Write(args[0]) Functor.of("nl/0") -> Nl + Functor.of("writeln/1") -> WriteLn(args[0]) Functor.of("read/1") -> Read(args[0]) // Lists diff --git a/src/prolog/builtins/ioOperators.kt b/src/prolog/builtins/ioOperators.kt index 4c80d61..5708bab 100644 --- a/src/prolog/builtins/ioOperators.kt +++ b/src/prolog/builtins/ioOperators.kt @@ -17,6 +17,8 @@ import prolog.logic.unifyLazy * Write [Term] to the current output, using brackets and operators where appropriate. */ class Write(private val term: Term) : Operator(Atom("write"), null, term), Satisfiable { + constructor(message: String) : this(Atom(message)) + override fun satisfy(subs: Substitutions): Answers { val t = applySubstitution(term, subs) @@ -45,6 +47,11 @@ object Nl : Atom("nl"), Satisfiable { override fun applySubstitution(subs: Substitutions): Nl = this } +class WriteLn(private val term: Term) : Conjunction(Write(term), Nl) { + constructor(message: String) : this(Atom(message)) + override fun applySubstitution(subs: Substitutions): WriteLn = WriteLn(applySubstitution(term, subs)) +} + /** * Read the next Prolog term from the current input stream and unify it with [Term]. *