Online Prolog - IDE, Editör, Derleyici, Yorumlayıcı

RSS

WebAssembly'ye derlenmiş SWI-Prolog ile Prolog programlarını online çalıştırın: olgular, kurallar, özyineleme, findall ve format; hatalar ve uyarılar gösterilir.

SWI-Prolog 10 (swipl-wasm) · Tarayıcınızda çalışır, böylece kodunuz sunucularımıza hiç ulaşmaz.
main.plProlog
Çıktı

            
        
Çalıştırmak için Ctrl/⌘ + Enter

Online Prolog derleyicinin özellikleri (IDE, editör & yorumlayıcı)

Prolog kodunu online ve ücretsiz olarak yazın, çalıştırın ve test edin. Bu sayfa online Prolog IDE'si, kod editörü, derleyicisi ve yorumlayıcısı olarak tek bir yerde çalışır: kodunuzu yazın, Çalıştır'a basın ve çıktıyı hemen görün. Her şey tarayıcınızda çalışır; kurulacak bir şey ya da açılacak bir hesap yoktur.

  • Kodu anında çalıştırın: SWI-Prolog 10 (swipl-wasm), ilk yüklemeden sonra bir saniyeden kısa sürede çıktı.
  • Kod editörü: sözdizimi vurgulama, satır numaraları, parantez eşleştirme ve otomatik parantez kapatma.
  • Anlaşılır hatalar: hata mesajları ve uyarılar, kendi bilgisayarınızda olduğu gibi çıktı panelinde görünür.
  • Tam ekran: Ctrl/⌘ + Shift + F, ayarlanabilir yazı boyutu, yan yana veya alt alta düzen ve yeniden boyutlandırılabilir paneller.
  • Otomatik kaydetme: kodunuz tarayıcınızda saklanır; tek tıkla main.pl olarak indirin veya kopyalayın.
  • Güvenle deneyin: süre sınırı ve Durdur düğmesi sonsuz döngüleri sonlandırır.
  • Gizli: Prolog çalışma ortamı cihazınızda çalışır, böylece kodunuz asla yüklenmez.
  • Karanlık mod ve klavye kısayolları: Ctrl/⌘ + Enter kodu çalıştırır.
  • Ücretsiz: kayıt yok, kullanım sınırı yok.

Diğer programlama dillerini öğrenin

Online Prolog derleyici nasıl kullanılır

  1. Düzenleyiciye olgularınızı ve kurallarınızı yazın ya da Örneği sıfırla ile örnekten başlayın.
  2. Neyin çalışacağını belirtin: :- initialization(main). yönergesini kullanın; burada main, denemek istediğiniz hedefleri çağıran ve sonuçları yazdıran bir yüklemdir.
  3. Çalıştır'a basın veya Ctrl + Enter tuşlarını kullanın (Mac'te ⌘ + Enter). Program main.pl dosyası olarak yüklenir ve yönergeleri yüklenirken çalışır.
  4. Yazdırılan metin, hatalar ve uyarılar için Çıktı paneline bakın. 5, 15 veya 60 saniyelik bir süre sınırı seçin ve bir özyineleme hiç bitmiyorsa Durdur'u kullanın.

SWI-Prolog çalışma zamanı yaklaşık 4 MB boyutundadır ve ilk ziyaretten sonra tarayıcınız tarafından önbelleğe alınır. Programınızı Kopyala ile ya da main.pl indirmesiyle saklayın, metni A− ve A+ ile boyutlandırın, panel düzenini düzen düğmesiyle değiştirin ve daha uzun programlar için Tam ekran'ı kullanın (Ctrl/⌘ + Shift + F, çıkmak için Esc).

Her şey tarayıcınızda çalışır. Program hiçbir zaman bir sunucuya gönderilmez ve düzenleyici son sürümünüzü yalnızca tarayıcınızın yerel depolama alanına kaydeder.

Neler destekleniyor

Sayfa, WebAssembly'ye derlenmiş SWI-Prolog 10'u (swipl-wasm) kullanır. Basitleştirilmiş bir yorumlayıcı değil, gerçek SWI-Prolog sistemidir.

  • Dosya yükleme (consult): kodunuz tam olarak consult('main.pl')'in yükleyeceği gibi yüklenir; bu yüzden yan tümceler (clause), işleçler ve yönergelerin hepsi çalışır.
  • Çıktı yüklemleri: format/2, write/1, writeln/1, print/1 ve nl/0 hepsi çıktı paneline yazdırır.
  • Listeler ve tüm çözümleri toplayan yüklemler: member/2, append/3, length/2, msort/2, findall/3, bagof/3, setof/3, forall/2.
  • Aritmetik: tamsayılar ve kayan noktalı sayılar üzerinde is/2 ve karşılaştırma işleçleriyle. Örnekteki 20! tam olarak hesaplanır.
  • SWI-Prolog'un yazdırdığı şekliyle tanılamalar; örneğin tekil değişken uyarıları ve ERROR: ... Arithmetic: `foo/0' is not a function gibi hatalar.

Masaüstü bir Prolog'dan farklı olanlar:

  • Etkileşimli bir ?- sorgu istemi yoktur; bu yüzden sorgu yazıp daha fazla yanıt için ; tuşuna basamazsınız. Sorguları main içine koyun ve yanıtları yazdırın ya da hepsini findall/3 veya forall/2 ile toplayın.
  • Standart girdi yoktur. read/1'in okuyacak bir şeyi olmadığından test verilerinizi olgu olarak yazın.

Tek programda Prolog temelleri

% Olgular
likes(mary, wine).
likes(john, wine).
likes(john, mary).

% Bir kural: X ve Y, ikisi de aynı şeyi seviyorsa arkadaştır
friends(X, Y) :- likes(X, Z), likes(Y, Z), X \== Y.

% Bir liste üzerinde, biriktiriciyle özyineleme
sum_list_acc([], Acc, Acc).
sum_list_acc([H|T], Acc0, Sum) :- Acc1 is Acc0 + H, sum_list_acc(T, Acc1, Sum).

% Kesme (!) ilk eşleşen yan tümceye bağlanır
max(X, Y, X) :- X >= Y, !.
max(_, Y, Y).

main :-
    findall(X-Y, friends(X, Y), Pairs), writeln(Pairs),
    sum_list_acc([1,2,3,4], 0, S), format("sum = ~w~n", [S]),
    max(3, 7, M), format("max = ~w~n", [M]).

:- initialization(main).

Çalıştırıldığında [mary-john,john-mary], sum = 10 ve max = 7 yazdırır.

Sık yapılan hatalar

  • = birleştirmedir (unification); atama veya aritmetik değildir. X = 1 + 2, X'i 1+2 terimine bağlar. Değerlendirmek için X is 1 + 2, iki sayıyı karşılaştırmak için =:= kullanın.
  • Değişkenler büyük harfle veya _ ile başlar. name bir atomdur ve Name bir değişkendir; bu yüzden küçük harfli bir yazım hatası bir yan tümcenin anlamını sessizce değiştirir.
  • Tekil değişken (singleton) uyarıları, bir değişkenin bir yan tümcede yalnızca bir kez geçtiği anlamına gelir; bu genellikle bir yazım hatasıdır. Bilerek kullanılmıyorsa adını _ veya _Name yapın.
  • Kesmeyi dikkatli kullanın. Yukarıdaki max/3, max(3, 7, M) için sorunsuzdur ama ikinci yan tümce kesmeye bağlıdır; bu yüzden max(5, 3, 3) yanlış biçimde başarılı olur. İkinci yan tümce olarak max(X, Y, Y) :- X < Y. yazmak onu güvenli kılar. Yanlış yerleştirilmiş bir kesme, findall'ın aksi hâlde döndüreceği çözümleri de gizleyebilir.
  • Sol özyineleme döngüye girer. ancestor(X, Y) :- ancestor(X, Z), parent(Z, Y). gibi bir kural sonsuza dek özyinelenir. parent hedefini başa koyun.
İpucu: main başarılı olmak yerine başarısız olursa SWI-Prolog, başlatma hedefinin başarısız olduğuna dair bir uyarı yazdırır. Ne kadar ilerlediğini görmek için hedefler arasına writeln/1 çağrıları ekleyin.

Sıkça sorulan sorular

Bir sorgu nasıl çalıştırılır?

Onu main gibi bir yüklemin içine yazın ve dosyanın sonuna :- initialization(main). ekleyin. Bir hedefi doğrudan bir yönergenin içine de koyabilirsiniz, örneğin :- X is 2^10, writeln(X).

Bu standart Prolog mu?

ISO standardını izleyen ve birçok uzantı ekleyen SWI-Prolog'dur. SWI-Prolog'da çift tırnaklı metin bir dizedir; bunun karakter kodları listesi anlamına gelmesine alışkınsanız bu önemlidir.

Bir sorgunun tüm yanıtlarını alabilir miyim?

Evet. Hepsini bir listede toplamak için findall/3'ü, örnek programın yaptığı gibi her birini yazdırmak için forall/2'yi kullanın.

Başka mantık veya işlevsel diller var mı?

Online Scheme Yorumlayıcı'yı veya Online Clojure Derleyici'yi deneyin ya da tüm online derleyicilere bakın.

Güncellendi

Panoya kopyalandı