Logikk-programmering

Det sies at rangstigen av programmeringskonsepter er prosedural programmering, imperativ programmering, funksjonell programmering, og på toppen logikk-programmering. De lærde strides. Men det er nokså objektivt at denne rangstigen er sortert etter hva som er minst «mekanisk». Logikk-programmering vinner lett den kampen.

SQL er et eksempel på logikk-programmering. Se for deg å bruke prosedural eller imperativ programmering til å gjøre en spørring mot en databasen. Ikke gøy, og sannsynligvis ikke relevant for problemet du løser. Mye deiligere å si select * from T1 join T2 on T1.b = T2.a, og la databaseserveren kose seg med parallelle hash-joins og annet snacks.

Datomic har en spørringsmotor som heter Datalog, som er et mer konkret eksempel på logikkprogrammering. All data i Datomic har formen [entity-id attribute value], eks [123 :user/email "foo@test.com"]. For å gjøre spørringer, spesifiserer du en rekke innsnevringer til Datomic, og logikk-motoren gjør resten. Spørringen [? :user/email "foo@test.com"] gir deg tilbake alle entity-id-er hvis attributt og verdi er det samme som du spesifiserte. Flytt spørsmålstegnet og legg til flere regler, og du har hele spørringsmotoren i et nøtteskall.

Likevel brukes dette sjelden i praktiske applikasjoner, som nok henger mye sammen med at det skal en del trening til for å tenke «dette problemet løses best med logikk-programmering» når du har en uke igjen til neste sprint og allerede ser de nøsta for-loopene for deg i hodet.

Våre anbefalinger

Fun with Relational Interpreters in miniKanren

Spol til 0:45:00. Sannsynligvis det villeste du noen gang har sett. Generere alle programmer som returnerer tallet 6? Lett! Hva med å generere et program som returnerer et program som returnerer seg selv når det kalles? Naturligvis. Alt dette med Scheme og miniKanren, en logikkmotor av William Byrd & Daniel Friedman Se foredraget