porównanie Fortran, Pascal, Lisp

0

Witam, mam zrobic porównanie gramatyki języków Fortran, Pascal i Lisp. Troche informacji już znalazłem, ale nie wiem czy w pełni dobrze przetłumaczyłem z anglojęzycznych stron, zatem proszę o przejrzenie informacji i o ew. dorzucenie podobieństw i różnic pomiędzy tymi językami (najlepiej wspólne cechy (podobienstwa i roznice) dwóch lub trzech z tych jezykow)

Język Lisp:
• posiada liczne dialekty,
• ma dwa podstawowe typy danych: atom i lista
• odpowiednik NULLa z Fortrana i Pascala pełni nil, który oznacza pustą listę
• kod jest trzymany w strukturze listy,
• jest wyposażony w garbage collector,
• posiada podstawowe typy które są funkcjami: integer, string, etc.. i mogą być przechowywane w zmiennych,
• był pierwszym językiem który potrafił wykorzystać rekurencje, co było implikowane przez funkcyjne typy podstawowe, obecnie w językach Fortran i Pascal również można korzystać z rekurencji,
• ma zmienne które są w rzeczywistości wskaźnikami, przypisanie zmiennej do innej jest jednoznaczne ze skopiowaniem wskaźnika,
• programy w nim napisane są drzewami wyrażeń w których każde zwraca wartość, w przeciwieństwie do np. języka FORTRAN który odróżnia wyrażenia od deklaracji
• typ symbol różni się od stringów tym, że można sprawdzać równość poprzez porównanie wskaźnika
• używa się drzew symbolów, co czyni go odmiennym od Fortrana i Pascala
• nie ma wyraźnej różnicy w czasie podczas czytania, kompilowania i uruchamiania programu, co również jest wyjątkowe w Lispie.
Język Fortran:

  • konstrukcja if-else doszła później niż w języku LISP, wcześniej korzystano z instrukcji goto,
  • posiada podobnie jak Lisp i Pascal wskaźniki
  • w Fortranie 2003 można już programować obiektowo
  • nie można zagnieżdżać wyrażeń
  • posiada własne dialekty, swego czasu nawet był integralną częścią komputera tak że można było na danej maszynie programować jedynie w Fortranie
  • podobnie jak LISP zmienił się fundamentalnie od czasów swoich początków
  • wbudowany typ do obslugi liczb zespolonych (COMPLEX) - to chyba najwzniejsze, dzieki temu sie trzyma dobrze az po dzis dzien
  • mozliwosc wspoldzielenia bloku pamieci (COMMON)
  • predefiniowane nazwy zmiennych (zwiazane ze stosowaniem IMPLICIT NONE, bez tego z gory bylo ustalone jaka zmienna jaki ma typ - juz nie pamietam i,j,k na pewno int)
  • dynamiczna alokacja to tak naprawde od F90 (niby sie da zrobic z g77 ale poza standart)
    Język Pascal:
  • najmłodszy spośród trzech porównywanych języków (stworzony w 1970r.)
  • podobnie jak Fortran ma rozbudowany alfabet (dużą liczbę słów kluczowych)
  • zarówno jak i Fortran i Lisp są językami wysokiego poziomu, przy czym Fortran najstarszym a Lisp drugim w kolejności
  • do oznaczania pustego wskaźnika używa się NIL, nie NULL.
  • od wersji 5.5 możliwe pisanie obiektowe (wraz ze wszystkimi jego plusami i minusami)
  • możliwość umieszczania wstawek assemblera bezpośrednio w kodzie
  • implementacja stałych, zmiennych i wskaźników
  • dyrektywy sterujące przebiegiem kompilacji
  • pomimo wzrostu możliwości sama składnia niewiele się zmienia na przełomie lat
  • w przeciwieństwie do C/C++ nie posiada wielowątkowości. W czasach Object pascala i Windowsa problem ten da się obejść
  • do czasu pojawienia się obiektów był typowym językiem strukturalnym
0

Moje kilka informacji

W pascalu:

  • do oznaczania pustego wskaźnika używa się NIL, nie NULL.
  • od wersji 5.5 możliwe pisanie obiektowe (wraz ze wszystkimi jego plusami i minusami)
  • możliwość umieszczania wstawek assemblera bezpośrednio w kodzie
  • implementacja stałych, zmiennych i wskaźników
  • dyrektywy sterujące przebiegiem kompilacji
  • pomimo wzrostu możliwości sama składnia niewiele się zmienia na przełomie lat
  • w przeciwieństwie do C/C++ nie posiada wielowątkowości. W czasach Object pascala i Windowsa problem ten da się obejść
  • do czasu pojawienia się obiektów był typowym językiem strukturalnym
0

dzięki za tyle info jestes wielki :)
zupdateuje mój opis o Twoje

0

do fortrana dodalbym

  • wbudowany typ do obslugi liczb zespolonych (COMPLEX) - to chyba najwzniejsze, dzieki temu sie trzyma dobrze az po dzis dzien
  • mozliwosc wspoldzielenia bloku pamieci (COMMON)
  • predefiniowane nazwy zmiennych (zwiazane ze stosowaniem IMPLICIT NONE, bez tego z gory bylo ustalone jaka zmienna jaki ma typ - juz nie pamietam i,j,k na pewno int)
  • dynamiczna alokacja to tak naprawde od F90 (niby sie da zrobic z g77 ale poza standart)
0

dzięki wielkie :)

0

powiedz mi jeszcze o co chodzi w tym

  • nie można zagnieżdżać wyrażeń

przeciez mozna grupowac warunki logiczne i petle tez ?

0

It was natural to have this distinction in Fortran because (not surprisingly in a language where the input format was punched cards) the language was line-oriented. You could not nest statements. And so while you needed expressions for math to work, there was no point in making anything else return a value, because there could not be anything waiting for it.
chodzi mi o to "nest statements" ale to czas przeszly w sumie..

0

Nie jestem pewien co do poprawności podpunktów

Lisp:

  • ma dwa podstawowe typy danych: atom i lista
  • posiada podstawowe typy które są funkcjami: integer, string, etc.. i mogą być przechowywane w zmiennych,
  • programy w nim napisane są drzewami wyrażeń w których każde zwraca wartość, w przeciwieństwie do np. języka FORTRAN który odróżnia wyrażenia od deklaracji
  • używa się drzew symbolów, co czyni go odmiennym od Fortrana i Pascala
  • posiada podobnie jak Lisp i Pascal wskaźniki (w sensie czy Lisp ma wskazniki?)

mysle ze popelnilem blad w tlumaczeniu, bo podobno np nie ma wskaznikow w Lispie..

0
  • posiada podstawowe typy które są funkcjami: integer, string, etc.. i mogą być przechowywane w zmiennych,

Nie, nie - funkcja jest jednym z podstawowych typów danych, jest drzewem atomów. Każda lista to wyrażenie, gdzie car /głowa listy/ to wywoływana funkcja, cdr zaś /ogon listy/ to argumenty. Efektem tego jest używanie notacji polskiej - prefiksowej - do zapisu wszystkich operacji. Funkcja to taka sama 'wartość' jak wszystko w Lispie. W sumie na upartego można powiedzieć, że podstawowe typy danych to atom i cons, cons to pojedyncza komórka listy, car to wartość, cdr to kolejny cons lub nil.
Oczywiśćie, że Lisp wskaźników nie posiada, wartości są bindowane pod symbolami, co można uznać za jakąś formę zmiennych referencyjnych. Tutaj należy zaznaczyć dziedziczenia środowiska funkcji - funkcja przejmuje środowisko, w którym została stworzona, przykład w Scheme bądź dowolnym innym Lispie posiadającym jedną przestrzeń nazw:

(define (make-adder y) (lambda (x) (+ x y))) ;; zwracamy funkcję ze zbindowanym argumentem

((make-adder 68) 1) ;; wyrażenie zwróci 69

W sumie tak wielu dialektów Lispu nie ma, aktualnie w użyciu jest głównie Common Lisp, Scheme i wbudowane w programy jak EmacsLisp czy AutoLisp.
Co do czasu wykonywania - Lisp posiada makra /konkretne cechy mechaniki zależne od dialektu/ wykonywane w czasie kompilacji\interpretacji będące... funkcjami w Lispie. Jako, że kod sam w sobie jest listą - makra umożliwiają dowolne przekształcenie czy wygenerowanie kodu. W każdej chwili działający program można rozszerzyć, wprowadzić w nim zmiany.
Lisp jako takich zmiennych nie posiada, posiada symbole + możliwość podbindowania nowej wartości do istniejącego symbolu.
Co do zwracania symbolu - całość jest ewaluowana, funkcja do swojego wyniku, wartości do samych siebie... Lisp posiada też możliwość zwracania wielu wartości równolegle, nie jako listę, wartości nie zbindowane giną. Przykładem jest funkcja floor, która zwraca obcięty wynik i resztę, bez zastosowania funkcji do manipulowania wartościami operuje się tylko na pierwszej - obciętym wyniku. Kolejna ciekawostka - Lisp to najmniejszy i najprostszy język programowania.
Hm, i najważniejsze - opiera się na rachunku lambda.

0
csh napisał(a)

Język Lisp:
• posiada liczne dialekty,
• ma dwa podstawowe typy danych: atom i lista
• odpowiednik NULLa z Fortrana i Pascala pełni nil, który oznacza pustą listę
• kod jest trzymany w strukturze listy,
• jest wyposażony w garbage collector,
• posiada podstawowe typy które są funkcjami: integer, string, etc.. i mogą być przechowywane w zmiennych,
• był pierwszym językiem który potrafił wykorzystać rekurencje, co było implikowane przez funkcyjne typy podstawowe, obecnie w językach Fortran i Pascal również można korzystać z rekurencji,
• ma zmienne które są w rzeczywistości wskaźnikami, przypisanie zmiennej do innej jest jednoznaczne ze skopiowaniem wskaźnika,
• programy w nim napisane są drzewami wyrażeń w których każde zwraca wartość, w przeciwieństwie do np. języka FORTRAN który odróżnia wyrażenia od deklaracji
• typ symbol różni się od stringów tym, że można sprawdzać równość poprzez porównanie wskaźnika
• używa się drzew symbolów, co czyni go odmiennym od Fortrana i Pascala
• nie ma wyraźnej różnicy w czasie podczas czytania, kompilowania i uruchamiania programu, co również jest wyjątkowe w Lispie.

  • common lisp posiada bardzo zaawansowany system obiektowy (CLOS) (wielodziedziczenie, multipolimorfizm, elementy programowania aspektowego) i metaobiekty (MOP)
  • no i chyba najwazniejsze - jest dynamicznie typowany w przeciwienstwie do fortrana i pascala
  • umozliwia metaprogramowanie (najbardziej zaawansowane ze wszystkich jezykow) przy pomocy makr
  • common lisp: wbudowana obsluga liczb zespolonych oraz ulamkow
  • kazdy typ zmiennej mozna porownac przez wskaznik; symbol rozni sie od stringu 'całością' - nie można go rozdzielić na litery, jest atomem. W naprawdę starych lispach bez typu string istnieją funkcję do rozdzielania symboli na litery (i składania) - pełni on tam rolę typu string.
    ? kod z funkcja w poscie powyzej zadziala tylko w lispie z leksykalnym scopingiem (zakresem?); np. scheme, common lisp. W lispach z dynamicznym scopingiem (np. emacs lisp) nie zadziała.

posiada podobnie jak Lisp i Pascal wskaźniki (w sensie czy Lisp ma wskazniki?)

Nie bezposrednio.
Chodzi o równość - dwie listy (np. '(1 2 3) i '(1 2 3)) mogą być tą sama listą - wtedy starczy porównanie wskaźnika (funkcja eq); w celu porównania zawartości element po elemencie należy użyć funkcji equal albo equalp (pomine roznice miedzy nimi).
Nie można natomiast tworzyć wskaźników bezpośrednio; wszystkie obiekty są po prostu zwracane przez referencje.

0

Ja tylko jeszcze taki mały kawałek od siebie.

csh napisał(a)
  • konstrukcja if-else doszła później niż w języku LISP, wcześniej korzystano z instrukcji goto,

No szkoda bardzo, żeby miał to wzcześniej, skoro if-then-else było pomysłem twórców lispa ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1