Maxim Kizub
10/15/2019, 7:49 AMXavier F. Gouchet
10/15/2019, 7:55 AMfun
that returns a Boolean, which can easily be written without needing changes in the language. Do you have an example of something that cannot be done with Kotlin that could be done with this new paradigm ?Maxim Kizub
10/15/2019, 7:59 AMXavier F. Gouchet
10/15/2019, 8:02 AMrule isColor(String@ c) {
c @= colors
; c ?= "magenta"
; c.startsWith('#'),
{ c.length() == 4
; c.length() == 7
}
}
Becomes
val colors = listOf("red", "orange", "yellow", "green", "blue", "violet")
fun isColor(c : String) : Boolean {
return c in colors || c == "magenta" || c.startsWith("#")
}
fun String.isColor() : Boolean = this in colors || this == "magenta" || this.startsWith("#"
Maxim Kizub
10/15/2019, 8:04 AMXavier F. Gouchet
10/15/2019, 8:05 AMThe 'rule' can search for al possible values.What do you mean ?
Maxim Kizub
10/15/2019, 8:06 AMXavier F. Gouchet
10/15/2019, 8:09 AMinterface Rule<T: Any> {
fun matches(value : T) : Boolean
fun generator() : Sequence<T>
}
c.startsWith('#'),
{ c.length() == 4
; c.length() == 7
}
Maxim Kizub
10/15/2019, 8:13 AMXavier F. Gouchet
10/15/2019, 8:14 AMFor lookup of values you need backtracking.What do you mean ?
Maxim Kizub
10/15/2019, 8:15 AMc @= colors, c.length() > 5
Xavier F. Gouchet
10/15/2019, 8:16 AMMaxim Kizub
10/15/2019, 8:16 AMXavier F. Gouchet
10/15/2019, 8:18 AMc @= colors, c.length() > 5
could be written as
c = colors.filter { it.length > 5 }.firstOrNull()
Maxim Kizub
10/15/2019, 8:24 AMXavier F. Gouchet
10/15/2019, 8:26 AMMaxim Kizub
10/15/2019, 8:35 AMXavier F. Gouchet
10/15/2019, 8:37 AMMaxim Kizub
10/15/2019, 8:39 AMI used this integrated logical engine (in the compiler) for name resolution (lookup or types, fields and methods), for parsing (the language had user-defined prefix, postfix and infix operators with priorities, plus postfix operators for types, like WeakReference<> or PVar<>), for type inference and choise of methods (there was multiple-dispatch methods) and so on.
Xavier F. Gouchet
10/15/2019, 8:40 AMMaxim Kizub
10/15/2019, 8:40 AMXavier F. Gouchet
10/15/2019, 8:40 AMMaxim Kizub
10/15/2019, 8:42 AMXavier F. Gouchet
10/15/2019, 8:45 AMMaxim Kizub
10/15/2019, 8:51 AMXavier F. Gouchet
10/15/2019, 8:52 AMMaxim Kizub
10/15/2019, 8:53 AMpublic rule resolveNameR(ResInfo path)
LVar@ var;
{
isInlinedByDispatcherMethod() , $cut, false
;
path.getPrevSlotName() == "targs" ||
path.getPrevSlotName() == "params" ||
path.getPrevSlotName() == "type_ref" ||
path.getPrevSlotName() == "dtype_ref",
$cut,
path @= targs
;
path @= params
;
path @= targs
;
!this.isStatic() && path.isForwardsAllowed(),
path.enterForward(path.env.proj.thisPar) : path.leaveForward(path.env.proj.thisPar),
Env.ctxTDecl(this).getType(path.env).resolveNameAccessR(path)
;
path.isForwardsAllowed(),
var @= params,
var.isForward(),
path.enterForward(var) : path.leaveForward(var),
var.getType(path.env).resolveNameAccessR(path)
}
Xavier F. Gouchet
10/15/2019, 8:58 AMelizarov
10/15/2019, 9:28 AMMaxim Kizub
10/15/2019, 9:46 AM