A következőkben szintén egy úgymond kijelentő modú programnyelvet mutatnék be, ugyanaz a helyzet vele, mint a prolog-gal, de egy kicsit mégis másabb. Az azonosság az egyetemi tanulmányokkal kapcsolatos, hiszen ugyanannak a tárgynak a keretein belül tanulom, ez az anyag második fele, hogy mivel jobb vagy mivel rosszabb mint a prolog, meg nem tudom mondani. Mindkét nyelvet arra találták ki, hogy gyorsan és hatékonyan működjenek.

Tulajdonképpen akár egy 100soros C programot, 6-10sorban meg lehet írni mind prologban mind pedig sml-ben, és most normál sorokra gondolok :) énis jól tudom, hogy akár egy sorba is össze lehet vonni az egészet, de most tényleg normál hosszúságú sorokra gondolok, mint például itt az oldalon egy sor. A különbség lényegében, hogy többet kell gondolkodni a megoldáson, talán nem annyira egyértelmű a megvalósítás, mint egy 'normál' programnyelvben, de gondolom 5év gyakorlat után már ez a gondolkodás se lenne probléma. Nagyon nem akarok belemélyedni a témába, egy példát azért mutatnék, a prolognál látott összeadóra:

fun osszead(A,B) = A+B;
> val osszead = fn : int * int -> int
val x = osszead(8,9);
> val x = 17 : int

Lássuk, mit is látunk :) A függvény deklaráció itt a fun kulcsszóval kezdődik, nyílván mondanom se kell minek a rövidítése, de vicces, hogy pont fun :) Ebben a nyelvben nincs kimenő változó, mint prologban, hanem visszatérési értékünk van, amit elég jól jelez a függvény név és változók után az '=' jel. Tehát a '=' előtt deklarált függvény a '=' után állóakat végrehajtva ad vissza egy eredményt, ez egyébként lehet bármi más is, de mivel most összeadó így A+B-t használtam érthető okokból :) Az amivel még másabb ez a nyelv, mint a prolog, hogy csak ugyanolyan típusú elemeket hasonlíthatunk össze, vagy végezhetünk műveleteket, tehát az összeadásnál is két int-et, vagy float-ot, stb. int-et és float-ot például nem tudunk, hibát kapunk rá. A másik különbség, hogy itt nincs mintaillesztés, ami az '=' két oldalán vannak azok ki értékelődnek, szóval a prolog példánál maradva 7=5+2 igazat fog adni, mivel kiértékelődik a két oldal összehasonlítás előtt. A második sorban a fordító által közölt tudnivaló van a függvénnyel kapcsolatban, a 'val' a 'value', mint érték rövidítése. A harmadik sorban ennek használata látható, ha az x-nek értéket akarunk adni, akkor val x = valami formátumot használunk, jelen esetben egy függvény visszatérési értékét fogjuk kapni, ami a negyedik sorban láthatunk is, val x = 17 : int, tehát az x értéke 17, ami int típusú. Erről ennyit.

A végére hagytam megint a legfontosabbat, hogy is működik ez a programnyelv, tehát hogy tudjuk kipróbálni a dolgot, mi sem egyszerűbb, van kismillió fordító hozzá, nekünk a mosml fordítót ajánlották, ehhez ha jól rémlik semmi nem kell, ingyenesen használható, a letöltési helyét a DP download site-on meg lehet találni. A telepítési útmutatót ajánlom figyelmetekbe, még pár dolgot meg kell tenni, hogy működjön, végül egy dos-os alkalmazást kapunk mindezért cserébe. A többi fordítóról lényegében semmit se tudok, csak hogy vannak, és többnyire nem dos alapúak. Amit még a prolognál is kihagytam, az emacs szövegszerkesztőbe lehet implementálni elvileg mindkét fordítót. Aki linuxozik ismeri az emacs-ot, aki nem annak sok sikert :) bár a normál fordítóval is el lehet boldogulni, szerintem. Bevezetőnek ennyit szántam, kellemes boldogulást vele!