- From: Jos De Roo <josderoo@gmail.com>
- Date: Thu, 3 Sep 2020 02:50:36 +0200
- To: Gregg Kellogg <gregg@greggkellogg.net>
- Cc: public-n3-dev@w3.org
- Message-ID: <CAJbsTZfvz+h1rcmyiJy6G9NyHJp-v8MnW6zS4pjH+SrRDzpo_A@mail.gmail.com>
Indeed, for bidirectional built-ins it is more complicated and typically
a subgoal will be suspended till either the subject or the object of the
built-in are grounded. For instance the math:degree implementation
in EYE looks as follows
'<http://www.w3.org/2000/10/swap/math#degrees>'(X, Y) :-
> when(
> ( ground(X)
> ; ground(Y)
> ),
> ( getnumber(X, U),
> Y is U*180/pi,
> !
> ; getnumber(Y, W),
> X is W*pi/180
> )
> ).
-- https://josd.github.io/ <http://josd.github.io/>
On Thu, Sep 3, 2020 at 2:30 AM Gregg Kellogg <gregg@greggkellogg.net> wrote:
> On Sep 2, 2020, at 5:16 PM, Jos De Roo <josderoo@gmail.com> wrote:
>
> Yes Gregg, it is a good test case (after adding a dot after 0.2279)
>
> $ cat test.n3
>> @prefix math: <http://www.w3.org/2000/10/swap/math#>.
>> @prefix : <http://example.org/test#>.
>> {
>> _:x math:lessThan 0.2280 .
>> _:x math:greaterThan 0.2279 .
>> 0.23 math:sin _:x
>> } => {:test3a a :SUCCESS} .
>
>
> and both CWM and EYE produce
>
> $ cwm test.n3 --think --data 2> /dev/null
>> #Processed by Id
>> # using base file:///tmp/test.n3
>> @prefix : <http://example.org/test#> .
>> :test3a a :SUCCESS .
>
>
> $ eye --nope test.n3 --pass 2> /dev/null
>> #Processed by EYE v20.0825.2124 josd
>> #eye --nope test.n3 --pass
>> @prefix math: <http://www.w3.org/2000/10/swap/math#>.
>> @prefix : <http://example.org/test#>.
>> :test3a a :SUCCESS.
>>
>
> EYE it makes use of coroutining i.e. it suspends
> the subgoals math:lessThan and math:greaterThan till
> their subjects get grounded by math:sin.
>
>
> Do you have some built-in knowledge about which arguments are inputs and
> which outputs? For built-ins that can be bi-directional, this seems
> complicated.
>
> But, it strikes me that each built-in could be run separately to see what
> variables are bound, and then run with those bound variables against those
> which previously generated no bindings with some repetition.
>
> Thanks for the suggestion.
>
> Gregg
>
> -- https://josd.github.io/
> <http://josd.github.io/>
>
>
> On Wed, Sep 2, 2020 at 9:54 PM Gregg Kellogg <gregg@greggkellogg.net>
> wrote:
>
>> I encountered an issue with my own implementation on some tests I
>> recently added [1]. In order to try to create tests that don’t depend too
>> much on floating-point precision, I added tests such as the following:
>>
>> {0.23 math:sin _:x . _:x math:lessThan 0.2280; math:greaterThan 0.2279}
>> => {:test3a a :SUCCESS} .
>>
>> In existing tests, the result produced is 0.227977523535e+00. My own
>> implementation, using the Ruby float package, gives 0.2279775235351884e0,
>> which seems to have more precision. GIven that test results use graph
>> isomorphism, precise values matter, so I came up with the above approach,
>> but it is somewhat problematic. My first attempt was the following rather
>> obvious statement:
>>
>> {0.23 math:sin [math:lessThan 0.2280; math:greaterThan 0.2279]} =>
>> {:test3a a :SUCCESS} .
>>
>> but, due to the way I parse, and the fact that statement order is
>> preserved, it came out like the following:
>>
>> {
>> _:x math:lessThan 0.2280 .
>> _:x math:greaterThan 0.2279
>> 0.23 math:sin _:x
>> } => {:test3a a :SUCCESS} .
>>
>> My processor processes each built-in in order, so the first statements
>> don’t result in any solutions; the last does, but the overall formula
>> evaluates to false because of the order of operations. This reminded my of
>> something Jos said about data-flow, and that would indeed be an interesting
>> way to approach it, but ordering the operations based on inputs and outputs
>> used in their arguments, but it falls down for more complicated scenarios
>> where arguments might, themselves, be quoted graphs, and it is not apparent
>> without much more introspection about what variables might be bound as a
>> result.
>>
>> I’m curious what other approaches there might be to solving such
>> data-flow issues. And, does the test formulation I used above make sense?
>>
>> Gregg Kellogg
>> gregg@greggkellogg.net
>>
>> [1]
>> https://github.com/gkellogg/N3/blob/444e545d528f7b94affa089ca9f64e935b173c68/tests/N3Tests/math/trig.n3
>>
>
>
Received on Thursday, 3 September 2020 00:51:02 UTC