SORU
28 Kasım 2011, PAZARTESİ


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
28 Kasım 2011, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • emimusic

    emimusic

    10 Mart 2006
  • Photoshop Training Channel

    Photoshop Tr

    13 Temmuz 2012
  • theKGB65

    theKGB65

    24 Aralık 2007