Skip to content

Commit

Permalink
Add ADT for LazyK
Browse files Browse the repository at this point in the history
  • Loading branch information
kamil-adam committed May 13, 2024
1 parent c9a3b7b commit 29f2aad
Showing 1 changed file with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package pl.writeonly.catculator.core.calculators.lazyk

import pl.writeonly.catculator.core.adt.calculus.Combinator
import pl.writeonly.catculator.core.adt.calculus.Combinator.CombinatorBT
import pl.writeonly.catculator.core.adt.tree.BinaryTree
import pl.writeonly.catculator.core.adt.tree.BinaryTree._

import pl.writeonly.catculator.core.adt.calculus.Constants

import spire.math.Natural

enum ADT:
case Com(c: Combinator)
case Num(n: Natural)
case Succ()

object ADT {

type ADTBT = BinaryTree[ADT]

val number0: ADTBT = Leaf(ADT.Num(Natural(0)))
val trueVar: ADTBT = fromCombinatorBT(Constants.trueCom)
val falseVar: ADTBT = fromCombinatorBT(Constants.falseCom)

def fromCombinatorBT(c: CombinatorBT): ADTBT = c match {
case Node(a, b) => Node(fromCombinatorBT(a), fromCombinatorBT(b))
case Leaf(a) => Leaf(fromCombinator(a))
}

private def fromCombinator(c: Combinator): ADT = ADT.Com(c)

}

0 comments on commit 29f2aad

Please sign in to comment.