Mantıksal programlama ve fonksiyonel programlama arasındaki fark
Birçok makale fonksiyonel ve mantık programlama arasındaki farkı anlamaya çalışarak okuyorum, ama ben yaptığım indirimi şimdiye kadar mantık programlama matematiksel ifadeler ile programları tanımlar. Ama böyle bir şey mantık programlama ile ilgili değildir.
Gerçekten bazı hafif fonksiyonel ve mantık programlama arasındaki fark döken olmaktan memnun olurum.
CEVAP
Mantık programlama matematiksel ifade ile programlar tanımlayan diyemem; o fonksiyonel programlama daha çok benziyor. Mantık programlama mantık ifadeleri (eninde sonunda mantık matematik) kullanır.
Benim görüşüme göre, fonksiyonel ve mantık programlama arasındaki temel fark, "yapı taşları": fonksiyonel programlama, mantıksal programlama koşullarına kullanırken fonksiyonları kullanır. Bir yüklem bir işlev değil, bir dönüş değeri yok. Bunun değerine bağlı olarak doğru veya yanlış olabilir argümanlar; bazı değerler tanımsız (genellikle) ise yüklem gerçek kılacak değerleri bulmaya çalışacağız.
Özellikle giriş birinci dereceden mantık ait mantık tümceleri Horn clauses adlı özel bir form kullanır; Hilog yüksek mertebeden mantık cümleler kullanır.
Prolog bir yüklem yazarken boynuz maddesi tanımladığınız:
foo :- bar1, bar2, bar3.
foo eğer bar1, bar2 ve bar3 doğru (true) olduğu anlamına gelir.
; bir yüklem için birden fazla maddeler olabilir: eğer bir şey demedim unutmayın
foo:-
bar1.
foo:-
bar2.
foo anlamına geliyorsa bar1 doğru olup olmadığını bar2 doğruysa doğrudur
Biraz mantık programlama her işlevi bir yüklem olarak ifade edilebilir beri fonksiyonel programlama birebir olduğunu söylüyorlar
foo(x,y) -> x y.
yazılı olabilir
foo(X, Y, ReturnValue):-
ReturnValue is X Y.
ama bu tür ifadeler biraz yanıltıcı olduğunu düşünüyorum
Mantık ve işlev arasındaki diğer bir fark da aynı. İşlevi vücuda girdikten sonra fonksiyonel programlama başarısız olamaz ve bir sonraki tanımlama için hareket. Örneğin yazabilirsiniz
abs(x) ->
if x>0 x else -x
hatta korumalar kullanın:
abs(x) x>0 -> x;
abs(x) x=<0 -> -x.
ama yazamaz
abs(x) ->
x>0,
x;
abs(x) ->
x.
diğer taraftan, giriş yazabilirsiniz
abs(X, R):-
X>0,
R is X.
abs(X, R):-
R is -X.
daha sonra tekrar arayın. abs(-3,R)
, prolog, ki deneyin ilk maddesi, ve başarısız infaz ne zaman ulaşır -3>0
nokta ama alışkanlık biraz hata; giriş olur deneyin ikinci tümcesi ve dönüş R=3
.
Fonksiyonel bir dil benzer bir şey (ben böyle bir dil biliyor) uygulamak imkansız olduğunu düşünmüyorum.
Hem paradigmalar Bildirge kabul rağmen, onları karşılaştırmak elmalarla armutları karşılaştırmak gibi oldukça farklı; çok farklı. Mantık programlama biraz denemeni öneririm: akıl blog bir deneyim olmalı. Felsefeyi anlamak ve sadece program yazmak için çalışmalısınız ancak: prolog yazmak için İşlevsel ve hatta zorunlu tarzında (korkunç sonuçları ile) sağlar.
Yapısal programlama ve fonksiyonel pro...
Eşzamanlı programlama ve paralel progr...
Senkron ve asenkron programlama arasın...
'akışları arasındaki fark ne ve a...
Bildirimsel ve Prosedürel Programlama ...