Deutsch   English   Français   Italiano  
<vl9jre$25sjr$4@solani.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.roellig-ltd.de!open-news-network.org!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: Mild Shock <janburse@fastmail.fm>
Newsgroups: comp.lang.prolog
Subject: Re: Side Note, Why not DSLs? (Re: Chicken and egg, with curry?)
Date: Fri, 3 Jan 2025 22:12:14 +0100
Message-ID: <vl9jre$25sjr$4@solani.org>
References: <vl9fs3$3ui38$1@dont-email.me> <vl9hq8$3ui38$2@dont-email.me>
 <vl9joh$25sjr$3@solani.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 3 Jan 2025 21:12:14 -0000 (UTC)
Injection-Info: solani.org;
	logging-data="2290299"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
 Firefox/91.0 SeaMonkey/2.53.19
Cancel-Lock: sha1:ar6Dram/X+6pakYC9jDGqhvdh6k=
In-Reply-To: <vl9joh$25sjr$3@solani.org>
X-User-ID: eJwFwYEBwDAEBMCVPJ5knKD2H6F3tEB0ejCcy9Vr5S1wHzxTu1JZiTm2iLmR2uf1V6Vkac8MnFRInxQOfzqFFOo=
Bytes: 6127
Lines: 156

Ok I see its repeating my posts to comp.lang.prolog,
because the sci.logic post has a shitty header!

Fuck Fuck Fuck Julio what are you doing Fuck Fuck Fuck

Mild Shock schrieb:
> Hi,
> 
> Just a side note, don't let you get distracted.
> A side node about the chicken/egg problem, i.e.
> without the curry:
> 
> - a) Eggs came first, for example Turtles had eggs
>       Turtles are part of an ancient reptilian
>       lineage ca 300 million years ago
> 
> - b) Chickens came after Turtles
>       Chickens, on the other hand, are much younger
>       in comparison, evolved from theropod dinosaurs
>       around 150 million years ago
> 
> Not sure whether this helps. But I think it could help
> nevertheless:
> 
> - i) Logic Programming is the Egg
> 
> - ii) From the Egg Turtles or Chickens can hatch,
>      its very easy to program functionally or
>      procdurally in Prolog. Just add small DSLs:
> 
> https://en.wikipedia.org/wiki/Domain-specific_language
> 
> here is an example of a DSL for array manipulation,
> and an implementation of Floyd Warshall algorithm:
> 
> :- op(100, yf, []).
> :- op(800, fx, new).
> :- op(800, fx, let).
> :- op(800, fx, if).
> 
> warshall(N, D) :-
>     new D[N,N],
>     (between(1,N,U), between(1,N,V), let D[U,V] = 999, fail; true),
>     (edge(U,V,W), let D[U,V] = W, fail; true),
>     (vertex(V), let D[V,V] = 0, fail; true),
>     (between(1,N,K),
>         between(1,N,I),
>            between(1,N,J),
>                let H = D[I,K] + D[K,J],
>                (if D[I,J] > H -> let D[I,J] = H; true),
>                fail; true).
> 
> The definition of the DSL needs only one extension
> of Prolog, i.e. nb_setarg/3 (SWI-Prolog) respectively
> change_arg/3 (Dogelog Player):
> 
> new D[N,M] :-
>     functor(D, '', N),
>     D =.. [_|L],
>     new2(L, M).
> 
> new2([], _).
> new2([X|L], N) :-
>     functor(X, '', N),
>     new2(L, N).
> 
> let V = E :- var(V), !,
>     let2(E,V).
> let D[R,C] = E :-
>     let2(E,V),
>     arg(R, D, H),
>     nb_setarg(C, H, V).
> 
> let2(D[R,C], V) :- !,
>     arg(R, D, H),
>     arg(C, H, V).
> let2(E+F, R) :- !,
>     let2(E, V),
>     let2(F, W),
>     R is V+W.
> let2(V, V).
> 
> if E > F :-
>     let2(E, V),
>     let2(F, W),
>     V > W.
> 
> Idiot Prolog systems like Scryer Prolog or Trealla Prolog
> refuse to provide such imperative gadgets, which are quite
> useful. If you interpret the DSL, its already bleeing fast,
> 
> much faster than a pure implementation:
> 
> ?- time((between(1,1000,_), graph(G),
>     floyd_warshall(4, G, M), fail; true)).
> % 3,803,998 inferences, 0.156 CPU in 0.183 seconds (85% CPU, 24345587 Lips)
> true.
> 
> ?- time((between(1,1000,_), warshall(4,D), fail; true)).
> % 1,046,998 inferences, 0.062 CPU in 0.062 seconds (100% CPU, 16751968 
> Lips)
> true.
> 
> If you compile the DSL, you can again an itch more speed:
> 
> /* DSL compiled */
> ?- time((between(1,1000,_), warshall(4,D), fail; true)).
> % 336,998 inferences, 0.000 CPU in 0.020 seconds (0% CPU, Infinite Lips)
> true.
> 
> Bye
> 
> Julio Di Egidio schrieb:
>> On 03/01/2025 21:04, Julio Di Egidio wrote:
>>> Partial and tentative:
>>>
>>> ```
>>>    Functional = Closures/applications, Reduction/canonicity
>>>      /    |
>>> Logical  |   = Predicates/queries, Resolution/subsumption
>>>      \    |
>>>    Imperative = Procedures/invocations, Execution/...
>>> ```
>>>
>>> And there are two views of that triangle: Logical is the top of the 
>>> *ideal* such triangle, along the lines of a universe with Prop on 
>>> top, which we can reason with; Imperative is the bottom of a 
>>> *concrete* such triangle, the bootstrap as well as the final point of 
>>> application of any concrete system.
>>>
>>> And Logical is the constructive (structural) type-theory founding the 
>>> Functional, where Functional exists for expressivity and modularity 
>>> (what else?), plus can be compiled back/down to machine language...
>>>
>>> Right?
>>
>> BTW, there are deficiencies of standard Prolog that are indeed very 
>> annoying, to the point that some invoke for the other way round:
>>
>> HANSEI / Re-thinking Prolog
>> <https://okmij.org/ftp/kakuritu/logic-programming.html#vs-prolog>
>>
>> But, besides that I would not put logic in terms of "guessing", I'd 
>> propose we just need a Prolog that doesn't have the self-inflicted 
>> quirks: a strengthened resolution with declarative determinism and 
>> indexing, and a strengthened semantics, of variables and/vs open 
>> terms, with a partial order of terms by subsumption, and unifiability 
>> as comparability (a purely structural type system definitionally), 
>> i.e. where a variable is the most general term...  Or something like 
>> that.
>>
>> No?
>>
>> -Julio
>>
>