Skip to content

Commit

Permalink
+ improve js api
Browse files Browse the repository at this point in the history
  • Loading branch information
gciatto committed Nov 5, 2021
1 parent 51892bb commit c94640c
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,12 @@ class OperatorSet(operators: Sequence<Operator>) : Set<Operator> by operators.to
companion object {

@JvmField
@JsName("EMPTY")
val EMPTY = OperatorSet(emptySequence())

/** Arithmetic Operator's OperatorSet */
@JvmField
@JsName("ARITHMETIC")
val ARITHMETIC = OperatorSet(
sequenceOf("+", "-", "\\").map { Operator(it, Specifier.FY, 200) } +
sequenceOf("^").map { Operator(it, Specifier.XFY, 200) } +
Expand All @@ -70,13 +72,15 @@ class OperatorSet(operators: Sequence<Operator>) : Set<Operator> by operators.to

/** Arithmetic Comparison Operator's OperatorSet */
@JvmField
@JsName("ARITHMETIC_COMPARISON")
val ARITHMETIC_COMPARISON = OperatorSet(
sequenceOf("=:=", "=\\=", "<", "=<", ">", ">=")
.map { Operator(it, Specifier.XFX, 700) }
)

/** Term Comparison Operator's OperatorSet */
@JvmField
@JsName("TERM_COMPARISON")
val TERM_COMPARISON = OperatorSet(
sequenceOf("=", "\\=").map { Operator(it, Specifier.XFX, 700) } +
sequenceOf("==", "\\==", "@<", "@=<", "@>", "@>=").map { Operator(it, Specifier.XFX, 700) } +
Expand All @@ -86,6 +90,7 @@ class OperatorSet(operators: Sequence<Operator>) : Set<Operator> by operators.to

/** Control Flow Operator's OperatorSet */
@JvmField
@JsName("CONTROL_FLOW")
val CONTROL_FLOW = OperatorSet(
sequenceOf(",").map { Operator(it, Specifier.XFY, 1000) } +
sequenceOf("->").map { Operator(it, Specifier.XFY, 1050) } +
Expand All @@ -95,13 +100,15 @@ class OperatorSet(operators: Sequence<Operator>) : Set<Operator> by operators.to

/** Clauses Operator's OperatorSet */
@JvmField
@JsName("CLAUSES")
val CLAUSES = OperatorSet(
sequenceOf(":-", "?-").map { Operator(it, Specifier.FX, 1200) } +
sequenceOf(":-", "-->").map { Operator(it, Specifier.XFX, 1200) }
)

/** Standard OperatorSet */
@JvmField
@JsName("STANDARD")
val STANDARD = OperatorSet(
ARITHMETIC.asSequence() +
ARITHMETIC_COMPARISON.asSequence() +
Expand All @@ -112,6 +119,7 @@ class OperatorSet(operators: Sequence<Operator>) : Set<Operator> by operators.to

/** Default OperatorSet */
@JvmField
@JsName("DEFAULT")
val DEFAULT = STANDARD
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import it.unibo.tuprolog.bdd.BinaryDecisionDiagram
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.utils.Taggable
import it.unibo.tuprolog.utils.setTag
import kotlin.js.JsName
import kotlin.jvm.JvmName
import kotlin.math.max
import kotlin.math.min
Expand All @@ -35,6 +36,7 @@ val <T : Taggable<T>, U : T> U.probability: Double
/**
* Assigns a probability value to this object.
*/
@JsName("setProbability")
fun <T : Taggable<T>, U : T> U.setProbability(
value: Double
): U = setTag(PROBABILITY_TAG, normalizeProbability(value))
Expand All @@ -55,10 +57,12 @@ val SolveOptions.isProbabilistic: Boolean
/**
* Sets the probabilistic computation option to [value].
*/
@JsName("setProbabilistic")
fun SolveOptions.setProbabilistic(
value: Boolean
) = setOption(PROBABILISTIC_OPTION_TAG, value)

@JsName("probabilistic")
fun SolveOptions.probabilistic() = setProbabilistic(true)

/**
Expand All @@ -77,6 +81,7 @@ val Solution.binaryDecisionDiagram: BinaryDecisionDiagram<out Term>?
* Returns a new [Solution] obtained by assigning the [value] instance
* of [BinaryDecisionDiagram] to [this] [Solution].
*/
@JsName("setBinaryDecisionDiagram")
fun Solution.setBinaryDecisionDiagram(
value: BinaryDecisionDiagram<out Term>
) = setTag(BINARY_DECISION_DIAGRAM_TAG, value)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package it.unibo.tuprolog.solve

import it.unibo.tuprolog.bdd.BinaryDecisionDiagram
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.utils.Taggable

@JsName("probability")
fun <T : Taggable<T>, U : T> probability(taggable: U): Double =
taggable.probability

@JsName("isProbabilistic")
fun isProbabilistic(solveOptions: SolveOptions): Boolean =
solveOptions.isProbabilistic

@JsName("hasBinaryDecisionDiagram")
fun hasBinaryDecisionDiagram(solution: Solution): Boolean =
solution.hasBinaryDecisionDiagram

@JsName("binaryDecisionDiagram")
fun binaryDecisionDiagram(solution: Solution): BinaryDecisionDiagram<out Term>? =
solution.binaryDecisionDiagram
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,21 @@ package it.unibo.tuprolog.solve.problog
import it.unibo.tuprolog.core.operators.Operator
import it.unibo.tuprolog.core.operators.OperatorSet
import it.unibo.tuprolog.core.operators.Specifier
import kotlin.js.JsName
import kotlin.jvm.JvmField
import kotlin.jvm.JvmName

@JsName("ANNOTATION_FUNCTOR")
const val ANNOTATION_FUNCTOR = "::"

@JvmField
@JsName("ANNOTATION_OPERATOR")
val ANNOTATION_OPERATOR = Operator(ANNOTATION_FUNCTOR, Specifier.XFY, 900)

@JvmField
@JsName("PROBLOG_SPECIFIC_OPERATORS")
val PROBLOG_SPECIFIC_OPERATORS = OperatorSet(ANNOTATION_OPERATOR)

@JvmField
@JsName("PROBLOG_OPERATORS")
val PROBLOG_OPERATORS = OperatorSet.DEFAULT + PROBLOG_SPECIFIC_OPERATORS

0 comments on commit c94640c

Please sign in to comment.