| 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 >> >