Abstrakt. Partiell utvärdering av logiska program som innehåller orena predikat utgör icke-triviala utmaningar. Impure predikat inkluderar de som producerar biverkningar, höja fel (eller undantag), och de vars sanning värde varierar beroende på graden av momentiation av argument 4. I synnerhet kan icke-vänstersta utveckliga steg ge felaktiga resultat eftersom beräkningsregelns oberoende inte längre föreligger i närvaro av orena predikat. Befintliga förslag tillåter icke-vänstersta utveckling steg, men på bekostnad av noggrannhet: bindningar och misslyckanden sprids inte baklänges till predikat som kan vara orena. I detta arbete föreslår vi ett partiellt utvärderingssystem som avsevärt minskar de situationer där en sådan retroaktivitet måste undvikas. I detta syfte tar vår delutvärderare hänsyn till informationen om renheten hos predikat som uttrycks i termer av påståenden. Detta gör det möjligt att uppnå vissa optimeringar som inte är genomförbara med hjälp av befintliga partiella utvärderingsmetoder. Vi hävdar att vårt förslag går utöver de befintliga genom att det är a) korrekt, eftersom klassificeringen av ren vs orenhet görs på atomnivå i stället för predikat, b) extensibel, eftersom informationen om renhet kan läggas till i program med hjälp av påståenden utan att behöva ändra den partiella utvärderaren själv, och c) automatisk, eftersom (bakåt) analys kan användas för att automatiskt dra de nödvändiga påståendena. Vårt tillvägagångssätt har genomförts inom ramen för CiaoPP, den abstrakta tolkningsbaserade preprocessorn för Ciaos logiska programmeringssystem.
Ett första steg i denna riktning har tagits i REF ) genom att använda bakåtanalyser för att dra slutsatser om renhetspåståenden som avgör när ett icke-vänstersta steg är säkert i närvaro av orena predikat.
Non-leftmost Unfolding in Partial Evaluation of Logic Programs with Impure Predicates
{'venue': 'LOPSTR', 'journal': None, 'mag_field_of_study': ['Computer Science']}