From e1763e05108945745458f4bf8085059dcb3c4cdc Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 8 May 2025 09:34:05 +0200 Subject: [PATCH 1/2] fix: Repl ook enter duwen --- src/repl/Repl.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/repl/Repl.kt b/src/repl/Repl.kt index 4db4fbc..32326ba 100644 --- a/src/repl/Repl.kt +++ b/src/repl/Repl.kt @@ -55,7 +55,14 @@ class Repl { } } - "a" -> return + "" -> { + io.checkNewLine() + return + } + "a" -> { + io.checkNewLine() + return + } "." -> { io.checkNewLine() return From 973365e2ec75f3915bc2bb9ae14fd98801552b0b Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Thu, 8 May 2025 09:35:49 +0200 Subject: [PATCH 2/2] feat: Atomic & Compound parsen --- src/interpreter/Preprocessor.kt | 3 ++- src/prolog/builtins/analysisOperators.kt | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/interpreter/Preprocessor.kt b/src/interpreter/Preprocessor.kt index c65efd5..97edd8f 100644 --- a/src/interpreter/Preprocessor.kt +++ b/src/interpreter/Preprocessor.kt @@ -63,6 +63,8 @@ open class Preprocessor { Functor.of("functor/3") -> FunctorOp(args[0], args[1], args[2]) Functor.of("arg/3") -> Arg(args[0], args[1], args[2]) Functor.of("clause/2") -> ClauseOp(args[0] as Head, args[1] as Body) + Functor.of("atomic/1") -> AtomicOp(args[0]) + Functor.of("compound/1") -> CompoundOp(args[0]) // Arithmetic Functor.of("inf/0") -> Integer(Int.MAX_VALUE) @@ -111,7 +113,6 @@ open class Preprocessor { Functor.of("!/0") -> Cut() Functor.of(",/2") -> Conjunction(args[0] as LogicOperand, args[1] as LogicOperand) Functor.of(";/2") -> Disjunction(args[0] as LogicOperand, args[1] as LogicOperand) - Functor.of("|/2") -> Bar(args[0] as LogicOperand, args[1] as LogicOperand) Functor.of("\\+/1") -> Not(args[0] as Goal) // Database diff --git a/src/prolog/builtins/analysisOperators.kt b/src/prolog/builtins/analysisOperators.kt index 8982313..4aff69e 100644 --- a/src/prolog/builtins/analysisOperators.kt +++ b/src/prolog/builtins/analysisOperators.kt @@ -137,3 +137,23 @@ class ClauseOp(private val head: Head, private val body: Body) : } } } + +class AtomicOp(private val term: Term) : Operator(Atom("atomic"), null, term) { + override fun satisfy(subs: Substitutions): Answers { + return if (atomic(term, subs)) { + sequenceOf(Result.success(emptyMap())) + } else { + emptySequence() + } + } +} + +class CompoundOp(private val term: Term) : Operator(Atom("compound"), null, term) { + override fun satisfy(subs: Substitutions): Answers { + return if (compound(term, subs)) { + sequenceOf(Result.success(emptyMap())) + } else { + emptySequence() + } + } +}