argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: логическо и функционално програмиране  (Прочетена 20094 пъти)

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis

Здравейте колеги,

Бих искал да помоля тези от вас, които пазят упражненията си по логическо и функционално програмиране (програмите на лисп и пролог), да ги постнат във форума. Благодаря предварително!

поздрави:
Атанас Чанев
Активен

del

  • Гост
Активен

artanis

  • Неактивен Неактивен
  • Публикации: 589
    • http://free.hit.bg/artanis
логическо и функционално програмиране
« Отговор #2 -: 03.12.2004, 19:33:00 »

И още как. 10x  
Активен

TeeRexX

  • Неактивен Неактивен
  • Публикации: 739
  • изпратете ми анонимно пари в плик :)
    • www.myspace.com/teerexx
логическо и функционално програмиране
« Отговор #3 -: 04.12.2004, 22:56:00 »

kato mi mine izpita po tazi disciplina 6te izpolzvam tozi topic za da izrazq mnenieto si za neq :+) (ako mi pozvolite)
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
логическо и функционално програмиране
« Отговор #4 -: 05.12.2004, 16:44:00 »

TeeRexX : hahaa ... a ve vij LIsp-a ne beshe zle..   ama prologa..... tztztz .. :+) pochti sichko razbrah osven kak se programira :P xaaxa
Активен

TeeRexX

  • Неактивен Неактивен
  • Публикации: 739
  • изпратете ми анонимно пари в плик :)
    • www.myspace.com/teerexx
логическо и функционално програмиране
« Отговор #5 -: 05.12.2004, 22:15:00 »

ma to verno li moje da se programira na Prolog?!?
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
логическо и функционално програмиране
« Отговор #6 -: 06.12.2004, 03:39:00 »

Може ако си мазохист  
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
логическо и функционално програмиране
« Отговор #7 -: 08.12.2004, 12:43:00 »

TeeRexX : na chist prolog apsurd ! obache sigurno ima ezici koito sa firmeni ezici i sa hibridni mejdu prolog i neshto obektno orientirano ili procedurno primerno prolog+java i na nego moje BI eventualno bi ti bil ot pomosht tova che si znael prolog makar che se samnqvam.
Активен

Phyz

  • Гост
логическо и функционално програмиране
« Отговор #8 -: 08.12.2004, 14:06:00 »

Може....обаче има 2 пътя:

1. Искаш с програмиране да си изкарваш хляба, а през другото време да се моткаш, да си поркаш яко, да си хулиганстваш и разни други такива обществено полезни неща и въобще не ти дреме за това, коло неща знаеш. Ако искаш това - Java та и .Net са за тебе.

2. Да пишеш програми НАИСТИНА ти прави кеф, съответно повечето от свободното ти време отива в четене на разни интересни неща, свързани с програмиране. Ако това е така в повечето случаи стигаш до извода, че наистина ти ТРЯБВАТ езици като C, Prolog, Lisp, Python, Ruby и т.н., за да можеш по-лесно да изразяваш това, което се случва в главата ти.

Всичко е въпрос на необходимост - ако нямаше необходимост, нямаше да има ни Prolog, ни Lisp, ни Python... а щеше да има нещо, наречено примерно "Pliok" и всички щаха да драскат на него.

Joke, м/у другото мисля си, че когато стигнеш момента, в който ТИ ще определяш архитектурата на някаква система ще осъзнаеш колко е полезно да ги знаеш тези неща... това е друг, различен начин на мислене.

"It is impossible to get out of a problem by using the same kind of thinking, that it took to get into the problem"
Albert Einstein, Nobel Laureate, Physics
Активен

;-)

  • Гост
логическо и функционално програмиране
« Отговор #9 -: 09.12.2004, 17:05:00 »

Heh tova me razsmia na edno miasto da slagat C i Prolog. Prolog v chistia si vid e edno nedorazumenie. Tova che 90% ot "programistite" na Java i .Net tyrsiat helpa za edin cikyl ne znachi che sa neseriozni ezici. Lichno az kritikuva ezici koito poznavam. V chist vid Prolog izvyn universitetite niama. Elementarena zadacha - naj-efektivno da se opredeli dali estestveno chislo e tochna stepen na 2. Mnogo iskam reshenie na Prolog ili Lisp syotvetno da vidia predimstvoto na tozi ezik. Naj-smeshnoto obiasnenie e kolko lesno se pravi backtracking na Prolog - pravi se lesno na vseki ezik, za smetka na tova za edin cikyl ili "if" se pishat izlishni predikati i koda e v pyti po-nechetim.

quote:
Originally posted by Phyz:
Може....обаче има 2 пътя:

1. Искаш с програмиране да си изкарваш хляба, а през другото време да се моткаш, да си поркаш яко, да си хулиганстваш и разни други такива обществено полезни неща и въобще не ти дреме за това, коло неща знаеш. Ако искаш това - Java та и .Net са за тебе.

2. Да пишеш програми НАИСТИНА ти прави кеф, съответно повечето от свободното ти време отива в четене на разни интересни неща, свързани с програмиране. Ако това е така в повечето случаи стигаш до извода, че наистина ти ТРЯБВАТ езици като C, Prolog, Lisp, Python, Ruby и т.н., за да можеш по-лесно да изразяваш това, което се случва в главата ти.

Всичко е въпрос на необходимост - ако нямаше необходимост, нямаше да има ни Prolog, ни Lisp, ни Python... а щеше да има нещо, наречено примерно "Pliok" и всички щаха да драскат на него.

Joke, м/у другото мисля си, че когато стигнеш момента, в който ТИ ще определяш архитектурата на някаква система ще осъзнаеш колко е полезно да ги знаеш тези неща... това е друг, различен начин на мислене.

"It is impossible to get out of a problem by using the same kind of thinking, that it took to get into the problem"
Albert Einstein, Nobel Laureate, Physics



Активен

Phyz

  • Гост
логическо и функционално програмиране
« Отговор #10 -: 09.12.2004, 18:02:00 »

Не знам човеко... говоря ти за езици, които по принцип не се търсят много много, затова съм ги сложил всички в кюпа. Ти май въобще не си схванал за какво говоря... идеите, които са довели до появата на Prolog и Lisp могат да се реализират (сравнително) лесно на Java или C++. Можеш да си имаш класове Predicate или Function със съответната функционалност. И с тях да си решаваш проблеми, които са лесни на Prolog и Lisp, а е голям гърч да ги правиш директно. Обаче ако не знаеш за тези концепции ще си се гърчиш...
Нали ти казах, всичко е въпрос на нужда. Ако нямаш нужда от тях - не ти трябват. Ти явно се оправяш доста добре и без тези неща. Тогава те нямат смисъл за тебе. Това е, като да занесеш телевизор на някой туземец и да му обясняваш на дълго и на широко колко е хубаво тфа нещо. Ми той си живее не зле и без телевизора. За кфо да се занимава с него? И в същото време има хора, които без телевизор не могат да живеят...

Дам... такива ми ти работи...

И на мен Prolog а не ми се нрави много много... и на мен не ми се занимава с телевизори... виж Lisp а си е друга работа... обаче това не значи, че не трябва де се учи. Току виж се намери някой, за който Prolog а ще е най-доброто нещо, което е виждал.

М/у другото имам една позната, която пишеше на Prolog (може и още да пише) за някаква фирма. Предполагам, че не е в "чист" вид...
Активен

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org
логическо и функционално програмиране
« Отговор #11 -: 10.12.2004, 09:22:00 »

quote:
Originally posted by Phyz:
М/у другото имам една позната, която пишеше на Prolog (може и още да пише) за някаква фирма. Предполагам, че не е в "чист" вид...



GraphTalk - на OBS измислиците най-вероятно.
Активен

;-)

  • Гост
логическо и функционално програмиране
« Отговор #12 -: 10.12.2004, 10:05:00 »

Може би не бях достатъчно ясен - основната ми идея е: посредствени програмисти има и на C, C#, Java, но не езика е този който ги определя като такива. При тези езици винаги има какво да научи човек. Съгласен съм че за някой Lisp, Prolog са по-подходящи - главно хора за които да напишеш 1000 реда код значи да си най-великия програмист /още по-смешно е когато въобще броя на редовете се счита за критерий за сложност/. Специализираните езици са си добри в тяхната област, но колкото по-голям е проекта толкова предимствата им избледняват, а недостатъците им нарастват.
PS чакам отговор на задачата си ;-) интересно ми е какви решения ще се предложат за различни езици.
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
логическо и функционално програмиране
« Отговор #13 -: 10.12.2004, 13:15:00 »

Ето едно решение:
#include "stdafx.h"

int main(int argc, char* argv[])
{
   __int64 number = 1152921504606846976;//2^60
   while(number > 0){
      if((number % 2) && (number!=1)) {
         printf("Ne\n");
         return 0;
      }
      else{
         if (number==2 || number ==1){
            printf("Da\n");
            return 0;
         }
         else{
            number >>= 1;
         }
      }
   }
   return 0;
}
Активен

Phyz

  • Гост
логическо и функционално програмиране
« Отговор #14 -: 10.12.2004, 13:39:00 »

Lisp:

(defun blah (numb)
...(cond
......((<= numb 0) nil)
......((= numb 1) t)
......((/= (mod numb 2) 0) nil)
......(t (blah (/ numb 2)))
...)
)

Python:

def blah(numb):
   if numb <= 0: return False
   if numb == 1: return True
   while numb % 2 == 0:
      if numb == 2: return True
      numb = numb / 2
   return False

Ей ти и тестче:

print [x for x in range(1000000) if blah(x)]

Честно казано Lisp ското по ме кефи. И е по-бързо :)
Активен

Phyz

  • Гост
логическо и функционално програмиране
« Отговор #15 -: 10.12.2004, 13:41:00 »

Оплесках indentation a :) sorry...

Lisp:

(defun blah (numb)
...(cond
......((<= numb 0) nil)
......((= numb 1) t)
......((/= (mod numb 2) 0) nil)
......(t (blah (/ numb 2)))
...)
)

Python:

def blah(numb):
....if numb <= 0: return False
....if numb == 1: return True
....while numb % 2 == 0:
........if numb == 2: return True
........numb = numb / 2
....return False

Ей ти и тестче:

print [x for x in range(1000000) if blah(x)]

Честно казано Lisp ското по ме кефи. И е по-бързо :)
Активен

;-)

  • Гост
логическо и функционално програмиране
« Отговор #16 -: 10.12.2004, 13:44:00 »

Вероятно това е първото което и на мен ми хрумна. Само малка забележка - няма нужда да проверяваш за 2 - на следващата итерация ще стане 1 което е по-бързо, но малко по-бързо ;-) Чакам други предложения - интересно е по колко начина може да се реши задачата. Особено с какво език като Listp, Prolog, Python или Ruby помагат. Това Ruby ме разби - даже идея си нямам какво е, но сигурно това го знаят сериозните програмисти. Да няма грешни изводи: не пиша на .Net или Java.
Активен

;-)

  • Гост
логическо и функционално програмиране
« Отговор #17 -: 10.12.2004, 13:52:00 »

Докато си напиша пост-а се появиха и други мнения, предния ми отговор беше за sasquatch. Към Phyz: радвам се че се включи, но не смяташ ли че итеративното решение е по-бързо? Най-малко не слагаш EIP в стека. Но и с цикъл е бавно.
Активен

Phyz

  • Гост
логическо и функционално програмиране
« Отговор #18 -: 10.12.2004, 14:00:00 »

Не е... комерсиалните компилатори на Lisp правят програми, които са най-много 2 пъти по-бавни от аналозите на Цъ... а Питона (колкото и да не ми се иска да го призная) в общия случай е около 50 пъти по-бавен (всъшност от 2 до 100 пъти).

Колкото до Ruby - www.ruby-lang.org Хората казват, че ще е следващия Python... не знам. Пък и не ми се занимава. Просто знам, че има огромна тълпа почитатели. Езика е абсолютно ОО. В смисъл, че можеш да пишеш такива неща:

5.times {print 'blah'}

Обаче няма мощната поддръжка на списъци, това дет най ме кефи в Питона и Lisp а.
Активен

Nikolay

  • Неактивен Неактивен
  • Публикации: 62
логическо и функционално програмиране
« Отговор #19 -: 10.12.2004, 14:19:00 »

Pascal

program check;
var
    n:longint;
 
begin
    writeln("n=");
    readln(n);
  if  (Log(n)/Log(2)) - trunc(Log(n)/Log(2))=0
  then writeln("true")
  else writeln("false")
                     
end.

Активен
Nikolay D.