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

  • Khan Academy

    Khan Academy

    17 Kasım 2006
  • Mindy

    Mindy

    20 NİSAN 2006
  • Visual Life

    Visual Life

    3 Temmuz 2006