Prolog’un en büyük gücü programların kendilerini değiştirebilme yeteneğidir. Programlar gerçek ve kurallara bağlı olarak çalıştığı için bunların değiştirilmesi veya yenilerinin eklenmesi programın işleyişini değiştirecektir. Assert, asserta ve assertz bilgi tabanına ekleme yapmak için kullanılır. Assert bulunulan pozisyona, asserta başlangıca, assertz ise sona ekleme yapar. Örneğin yukarıda verilen programa aşağıdaki ifade ile bir gerçek eklenebilir:
assert(hayvan(sinek)).
Bilgi tabanından çıkarma işlemi için retract kullanılır. Örneğin kedi’yi bilgi tabanından silmek için aşağıdaki ifadeyi yazabiliriz:
retract(hayvan(kedi)).
Ekleme ve silme işlemlerinin yapılabilmesi için yüklemlerin dinamik olduğunun prrogramın başında belirtilmesi gerekir. hayvan yüklemi aşağıdaki şekilde dinamik olarak tanımlanabilir:
:- dynamic hayvan/1.
Burada 1 sayısı hayvan yükleminin arguman sayısıdır.
Herhengi bir yüklemle ilgili tüm cümleleri silmek için abolish yüklemi kullanılır. Örneğin bilgi tabanındaki tüm hayvan tanımları aşağıdaki ifade ile silinebilir.
Abolish(hayvan/1).
Ekleme ve silme işlemleri program çalışırken bellekte yapıldığı için yazdığınız program değişmeyecektir. İstenirse programın son hali bir dosyaya yazdırılabilir.
Terim okuma: read
read yüklemi prolog terimlerinin tuş takımından okunmasını sağlar. Tuş takımından girilen bilginin formatı program yazarken kullanılan formatın aynısı olamalıdır ve nokta ile sonlandırılmalıdır.
?- read(X). à soru
selam. à kullanıcı girişi
X = selam à X değeri
yes. à sonuç
Eğer read yükleminin argumanına bir değer atanmış ise prolog bu değer ile girilen değeri karşılaştırır:
?- read(evet). ?- read(evet).
evet. hayır.
yes no
Örneklerde görüldüğü gibi girilen değer argumanla aynı ise yes farklı ise no sonucu elde edilmektedir. Bu nedenle programın çalışması sırasında kullanıcıya sorulan evet/hayır tipindeki sorularda herhangi bir ek kontrol yapmadan programın işleyişi düzenlenebilir.