Fűzök néhány magyarázatot a help-beli szöveg értelmezéséhez. Csak néhány példát emelek ki, ezek alapján remélem, hogy a többit önállóan is megérti. 1. A help-ben szereplő néhány jelölés magyarázata: A változónevek előtt sokszor talál "+", "-","?" jeleket (esetleg ":" -t is, de ezt ritkán). Ezek jelentése: "+" nem változó kifejezés (vagyis konstans, ill. kiszámított érték, stb.) "-" változó kifejezés "?" nincs megkötés (ezek így is érthetők: a "+" "bemenő" paramétert jelent, a "-" "kimenőt", míg a "?" lehet ilyen is, olyan is.) ":" cél, klóz vagy prédikátumfej. 2. Ezek után néhány konkrétum: +Term1 = +Term2 Unify Term1 with Term2. Succeeds if the unification succeeds. Unify: egységesíti a két term-et, vagyis akkor igaz az egyenlőség, ha a két term illeszthető. (Ha nem emlékszik rá, nézzen utána, mikor illeszthető két term. Ez a második gyak. anyaga volt, de a jegyzet elején is megtalálja.) +Expr1 =:= +Expr2 Succeeds when expression Expr1 evaluates to a number equal to Expr2. Akkor igaz, ha a két kifejezés (Expr : kifejezés) kiszámított számértéke megegyezik. -Number is +Expr Succeeds when Number has successfully been unified with the number Expr evaluates to. Sikeres, ha a baloldalon szereplő szám (vagy változó) illeszthető a jobboldali kifejezés kiszámított értékével. If Expr evaluates to a float that can be represented using an integer (i.e, the value is integer and within the range that can be described by Prolog's integer representation), Expr is unified with the integer value. Ha a jobboldali kifejezés kiszámított értéke egész, akkor egész típusúnak kezeli az eredményt. Note that normally, is/2 will be used with unbound left operand. Általában a baloldalon változót szoktak használni, és ez a változó veszi fel a jobboldali kifejezés értékét. If equality is to be tested, =:=/2 should be used. For example: Ha azonosságot vizsgálunk, akkor inkább a =:= használatos. Pl.: ?- 1.0 is sin(pi/2). Fails!. sin(pi/2) evaluates to 1.0, but is/2 will represent this as the integer 1, after which unify will fail. Ez hamis, mert a jobboldalt egész típusúnak kezeli, a baloldal viszont float. ?- 1.0 is float(sin(pi/2)). Succeeds, as the float/1 function forces the result to be float. Ez már sikeres, de sokkal egyszerűbb ezt használni: ?- 1.0 =:= sin(pi/2). Succeeds as expected. Próbáljon ki néhány példát! (Ez általában is igaz, ha nem teljesen érti a help-et, próbálja ki.) Pl.: ?- A = 2. ?- A = B. ?- A = B+2. ?- a=b. ?- A = 3+2. ?- A is 3+2. ?- A =:= 3+2. ?- 5 =:= 3+2. ?- 5 = 3+2. ?- 5 is 3+2. Bár ezek alapján már talán önállóan is érti a többit, de még néhány operátor: +Term1 == +Term2 Succeeds if Term1 is equivalent to Term2. A variable is only identical to a sharing variable. Sikeres, ha a két term ekvivalens. Próbáljon ki néhány példát! Pl.: ?- A = 2. ?- A == 2. ?- alma(a,b) = alma(A,b). ?- alma(a,b) == alma(A,b). +Expr1 =< +Expr2 Succeeds when expression Expr1 evaluates to a smaller or equal number to Expr2. Sikeres, ha a két kiszámított kifejezés értéke között fennáll a reláció. +Term1 =@= +Term2 Succeeds if Term1 is `structurally equal' to Term2. Sikeres, ha a két term strukturálisan ekvivalens. Structural equivalence is weaker than equivalence (==/2), but stronger than unification (=/2). A strukturális ekvivalencia gyengébb, mint az ekvivalencia, de erősebb, mint az egységesítés(illesztés). Two terms are structurally equal if their tree representation is identical and they have the same `pattern' of variables. Strukturális ekvivalencia: azonos struktura, és a változók strukturája is megegyezik (de a változóneveknek nem kell azonosaknak lenniük). Examples: a =@= A false A =@= B true x(A,A) =@= x(B,C) false x(A,A) =@= x(B,B) true x(A,B) =@= x(C,D) true +Expr1 =\= +Expr2 Succeeds when expression Expr1 evaluates to a number non-equal to Expr2. Sikeres, ha a két kiszámított érték nem egyenlő egymással. Remélem, hogy ez a néhány példa elég ahhoz, hogy a többit is megértse a help alapján. Ha valakinek mégsem elég ennyi, jelezze (achs.agnes@gmail.com), és megpróbálom bővíteni a leírást.