2012-10-31 23 views
7

Prologda bir listenin sonuna bir öğe eklemeye çalışıyorum ancak başarısız olmaya devam ediyor.Prologda listenin sonuna nasıl eklenir

insertAtEnd(X,[ ],[X]). 
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).  

letters([a,b,c]). 

Neden bunun neden çalışmadığını anlamıyorum.

insertAtEnd(d,letters(Stored),letters(Stored)). 

Ben de boyunca Saklanan değişkende bu listeyi saklamak çalışılıyor, ancak yukarıda devam etmek doğru yolu olup olmadığından emin değilim.

+0

Bir listenin sonuna bir eleman yerleştirme gereği, O (1) ekleme yapacak * fark listelerine * bakmanızı önerir. –

cevap

3

Prolog bir ilişkisel hesaplama modelini uygular ve değişkenler sadece atanmış değil, örneği olabilir.

?- letters(Stored), 
    insertAtEnd(d, Stored, Updated), 
    write(Updated). 
+0

Yani orijinal liste düzenlenemez mi? Başka bir e harfi aldığımı söyleyelim, insertAtEnd (e, Updated, UpdatedAgain) çağrısı yapmalı mıyım? Listeyi konsol olmadan güncellemek için bir yüklemeyi kullanmaya çalışıyorum. – MeowMeow

+1

Evet, bu hesaplama yapmak için alışılmadık bir yoldur. Deklarasyon programlaması ile sıkı sıkıya bağlı. Prolog, alternatifleri bulması gerektiğinde, önceden bağlanmış bağlamaları geri almaya başladığında, geçerli kuralları bağlar. – CapelliC

1

Eğer append kullanmak ve ikinci liste olarak öğeyi koyabilirsiniz deneyin böyle

:

insertAtEnd (X, Y, Z): - ekleme (Y [X], Z).

+0

Bu sorunu çözmek için değerli bir ipucu olsa da, bir cevabı gerçekten bundan biraz daha fazla ayrıntıya ihtiyaç duyar. Bunun sorunu nasıl çözeceğini açıklamak için lütfen [değiştir]. Alternatif olarak, bunun yerine bir yorum olarak yazmayı düşünün. –

İlgili konular