A minimal description (noting there are two variations):

greater-than[t] |x: n> == |x: n> if float(n) > t, else |> greater-equal-than[t] |x: n> == |x: n> if float(n) >= t, else |> less-than[t] |x: n> == |x: n> if float(n) < t, else |> less-equal-than[t] |x: n> == |x: n> if float(n) <= t, else |> equal[t] |x: n> == |x: n> if (t - epsilon) <= float(n) <= (t + epsilon), else |> in-range[t1,t2] |x: n> == |x: n> if t1 <= float(n) <= t2, else |>And the second variation:

is-greater-than[t] |x: n> == |yes> if float(n) > t, else |no> is-greater-equal-than[t] |x: n> == |yes> if float(n) >= t, else |no> is-less-than[t] |x: n> == |yes> if float(n) < t, else |no> is-less-equal-than[t] |x: n> == |yes> if float(n) <= t, else |no> is-equal[t] |x: n> == |yes> if (t - epsilon) <= float(n) <= (t + epsilon), else |no> is-in-range[t1,t2] |x: n> == |yes> if t1 <= float(n) <= t2, else |no>They of course share some similarity with functions I already have, such as drop-below, drop-above, and some of the sigmoids.

Anyway, let's compare the "old" way, without these functions vs the new way:

Old:

is-greater-than-0 |*> #=> do-you-know push-float drop-below[1] pop-float |_self> is-greater-than-5 |*> #=> do-you-know push-float drop-below[5.01] pop-float |_self> count-name-matches |*> #=> push-float drop-below[2] pop-float extract-value count id |_self> is-early |time: 24h: *> #=> do-you-know drop-above[700] drop-below[330] pop-float |_self> is-late |time: 24h: *> #=> do-you-know (drop-below[2230] pop-float |_self> + drop-above[330] pop-float |_self>) range-is-early |time: 24h: *> #=> do-you-know drop sigmoid-in-range[330,700] pop-float |_self> range-is-late |time: 24h: *> #=> do-you-know drop (sigmoid-in-range[2230,2400] pop-float |_self> + sigmoid-in-range[0,330] pop-float |_self>) is-teenager |person: *> #=> do-you-know drop-below[13] drop-above[19] pop-float age |_self> is-adult |person: *> #=> do-you-know drop-below[18] pop-float age|_self> range-is-teenager |person: *> #=> do-you-know drop sigmoid-in-range[13,19] pop-float age |_self>New:

improved-is-greater-than-0 |*> #=> is-greater-than[0] |_self> improved-is-greater-than-5 |*> #=> is-greater-than[5] |_self> improved-count-name-matches |*> #=> greater-than[1] count id |_self> improved-range-is-early |time: 24h: *> #=> is-in-range[330,700] |_self> improved-range-is-late |time: 24h: *> #=> do-you-know ( in-range[2230,2400] |_self> + in-range[0,330] |_self>) improved-is-teenager |person: *> #=> is-in-range[13,19] age |_self> improved-is-adult |person: *> #=> is-greater-equal-than[18] age |_self>I guess that is about that. Like I said elsewhere, I'm always in favour of improvements that decrease the amount of work, or dancing, you need to do.

That's it for this post. Heaps more to come!

Update: I guess another point to observe is we can transfer not just data, but active rules when we pass around sw files. This I think will be useful!

Update: decided to implement a variant on these, that applies to the coeff of kets. This I guess is just syntactic sugar, so we don't need "is-equal[100] push-float", we can now do: "is-coeff-equal[100]".

coeff-greater-than[t] n|x: y> == n|x: y> if n > t, else |> coeff-greater-equal-than[t] n|x: y> == n|x: y> if n >= t, else |> coeff-less-than[t] n|x: y> == |x: y> if n < t, else |> coeff-less-equal-than[t] n|x: y> == n|x: y> if n <= t, else |> coeff-equal[t] n|x: y> == n|x: y> if (t - epsilon) <= n <= (t + epsilon), else |> coeff-in-range[t1,t2] n|x: y> == n|x: y> if t1 <= n <= t2, else |>And the second variation:

is-coeff-greater-than[t] n|x: y> == |yes> if n > t, else |no> is-coeff-greater-equal-than[t] n|x: y> == |yes> if n >= t, else |no> is-coeff-less-than[t] n|x: y> == |yes> if n < t, else |no> is-coeff-less-equal-than[t] n|x: y> == |yes> if n <= t, else |no> is-coeff-equal[t] n|x: y> == |yes> if (t - epsilon) <= n <= (t + epsilon), else |no> is-coeff-in-range[t1,t2] n|x: y> == |yes> if t1 <= n <= t2, else |no>Now I guess the comment comes up, how much is too little and how much is too much syntactic sugar? I guess I lean towards more rather than less.

Home

previous: xml vs bko

next: brief note on pretty print tables

updated: 19/12/2016

by Garry Morrison

email: garry -at- semantic-db.org