Μηχανική Μετάφραση Αριθμητικών



Σχετικά έγγραφα
Γλώσσες Προγραµµατισµού 2 Άσκηση 3

Επαναληπτικές Ασκήσεις Μαθηματικών Γ τάξη - 5 η Ενότητα Κεφ

Η συνάρτηση TextNumber.

ΠΙΝΑΚΕΣ ΠΟΣΟΤΗΤΩΝ ΚΑΙ ΠΡΟΫΠΟΛΟΓΙΣΜΩΝ , , , , , , , , ,75 42.

Συστήματα κ Τεχνολογίες Γνώσης Εργασίες στην Επεξεργασία Φυσικής Γλώσσας

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

τα βιβλία των επιτυχιών

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

ΠΡΑΚΤΙΚΟ.Σ. Νο 418 2) ΤΡΟΠΟΠΟΙΗΣΗ ΤΟΥ ΑΡΘΡΟΥ 5 ΤΟΥ ΚΑΤΑΣΤΑΤΙΚΟΥ

Όλες οι απαντήσεις. Μαθηματικά Γ Δημοτικού

Τεχνογλωσσία 8 Β' Εξάμηνο Λογικός Προγραμματισμός Prolog

Κάθε φυσικός αριθμός έχει έναν επόμενο αριθμό. Κάθε φυσικός αριθμός (εκτός από το 0) έχει έναν προηγούμενο φυσικό αριθμό.

0,00620 = 6, ΣΗΜΑΝΤΙΚΑ ΨΗΦΙΑ. Γενικοί Κανόνες για τα Σημαντικά Ψηφία

τα βιβλία των επιτυχιών

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΙΝΤΡΑΛΟΤ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΟΛΟΚΛΗΡΩΜΕΝΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΚΑΙ ΥΠΗΡΕΣΙΕΣ ΤΥΧΕΡΩΝ ΠΑΙΧΝΙΔΙΩΝ ΔΙΑΚΡΙΤΙΚΟΣ ΤΙΤΛΟΣ INTRALOT

COFFEE CONNECTION ABEE ΠΡΑΚΤΙΚΟ.Σ. 424 Α

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΓΙΑΝΝΗΣ ΖΑΧΑΡΟΠΟΥΛΟΣ. Γρήγορα τεστ. Μαθηματικά Ε Δημοτικού E 1 ΕΚΔΟΣΕΙΣ ΠΑΠΑΔΟΠΟΥΛΟΣ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Επαναληπτικές Ασκήσεις Μαθηματικών Γ τάξη 1 η Ενότητα

Επαναληπτικές Ασκήσεις Μαθηματικών Γ τάξη - 3 η Ενότητα Κεφ

Επικοινωνία:

ΓΙΑΝΝΗΣ ΖΑΧΑΡΟΠΟΥΛΟΣ. Γρήγορα τεστ. Μαθηματικά Ε Δημοτικού E 1 ΕΚΔΟΣΕΙΣ ΠΑΠΑΔΟΠΟΥΛΟΣ

Διαχειρίζομαι αριθμούς έως το

Συνοπτική Μεθοδολογία Ασκήσεων IP Fragmentation. Ασκήσεις στο IP Fragmentation

Διαδικασιακός Προγραμματισμός

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 3 ο. Οι Έλληνες της διασποράς. Στο κεφάλαιο αυτό, θα προσπαθήσουµε να επιτύχουµε τους εξής στόχους:

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

ΑΝΤΑΛΛΑΓΜΑ ΧΡΗΣΗΣ 2011 ΕΝΝΕΑ (9) ΤΗΛΕΟΠΤΙΚΩΝ ΣΤΑΘΜΩΝ ΕΘΝΙΚΗΣ ΕΜΒΕΛΕΙΑΣ ΤΗΛΕΟΠΤΙΚΟΣ ΣΤΑΘΜΟΣ ΚΥΚΛΟΣ ΕΡΓΑΣΙΩΝ 2010 ΑΝΤΑΛΛΑΓΜΑ 2%

Η Γενική Συνέλευση αποφάσισε ομόφωνα / με πλειοψηφία.% :

08/08/2014 Αριθμ. Πρωτ.: 28376

Για να εξασκηθώ = =... β)

Προγραμματισμός ΙI (Θ)

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Προγραμματισμός ΙI (Θ)

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Βασικές έννοιες προγραμματισμού

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Άρθρο 4 ΜΕΤΟΧΙΚΟ ΚΕΦΑΛΑΙΟ

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο Πέµπτο: Η Εξάσκηση

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διαδικασιακός Προγραμματισμός

Άρθρο 4 ΜΕΤΟΧΙΚΟ ΚΕΦΑΛΑΙΟ «Το μετοχικό κεφάλαιο της Εταιρείας ανέρχεται σήμερα στο ποσό των ευρώ πέντε εκατομμυρίων εννιακοσίων σαράντα μίας χιλιάδων

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

Αριθμητική Ανάλυση & Εφαρμογές

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Εργαστήρια Αριθμητικής Ανάλυσης Ι. 7 ο Εργαστήριο. Διανύσματα-Πίνακες 2 ο Μέρος

ΑΝΑΠΣΤΞΗ ΕΦΑΡΜΟΓΩΝ Ε ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΣΧΕΔΙΟ. ΑΡΘΡΟ 4ο ΔΙΑΡΚΕΙΑ

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Μαθηµατικά Τεύχος Α. Φύλλα εργασίας. Για παιδιά ΣΤ ΗΜΟΤΙΚΟΥ. Συµπληρωµατικές ασκήσεις & Προβλήµατα Ανάλυση θεωρίας µε ασκήσεις και παραδείγµατα

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015


ΠΡΑΚΤΙΚΟ υπ αρ. 42 Έκτακτης Γενικής Συνέλευσης των Μετόχων Ανώνυµης Εταιρείας µε την επωνυµία COFFEE CONNECTION ΑΝΩΝΥΜΗ ΒΙΟΜΗΧΑΝΙΚΗ

Συνοπτική Μεθοδολογία Ασκήσεων Κεφαλαίου 7. Ασκήσεις στο IP Fragmentation

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΠΡΟΣΟΜΟΙΩΣΗ ΠΑΝΕΛΛΑΔΙΚΩΝ ΕΞΕΤΑΣΕΩΝ Γʹ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΕΠΠ ΤΡΙΤΗ 18 ΑΠΡΙΛΙΟΥ 2017 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΠΤΑ (7)

Κατανεμημένα Συστήματα

ΜΑΘΗΜΑΤΙΚΑ Στ - ΕΝΟΤΗΤΑ 1 η Due 8-22

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΕΛΒΕ ΑΝΩΝΥΜΗ ΒΙΟΜΗΧΑΝΙΚΗ ΕΜΠΟΡΙΚΗ ΕΤΑΙΡΙΑ ΘΕΜΑΤΑ ΤΗΣ ΗΜΕΡΗΣΙΑΣ ΔΙΑΤΑΞΗΣ ΤΗΣ ΤΑΚΤΙΚΗΣ ΓΕΝΙΚΗΣ ΣΥΝΕΛΕΥΣΗ ΤΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

@ BY AVENUES PRIVATE INSTITUTE JUNE 2014

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Γ ΗΜΟΤΙΚΟΥ Τεύχος Β. Παίζω, Σκέφτοµαι, Μαθαίνω. Λύσεις ασκήσεων. για τα. αθηµατικά

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Γ ΗΜΟΤΙΚΟΥ Τεύχος Α. Παίζω, Σκέφτοµαι, Μαθαίνω. Λύσεις ασκήσεων. για τα. αθηµατικά

«F.H.L. Η. ΚΥΡΙΑΚΙΔΗΣ ΜΑΡΜΑΡΑ - ΓΡΑΝΙΤΕΣ ΑΝΩΝΥΜΗ ΒΙΟΜΗΧΑΝΙΚΗ ΚΑΙ ΕΜΠΟΡΙΚΗ ΕΤΑΙΡΕΙΑ» ΑΡ. Μ.Α.Ε /06/Β/91/06 ΑΡ. Γ.Ε.ΜΗ.

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

ΕΠΙΛΕΚΤΟΣ ΚΛΩΣΤΟΥΦΑΝΤΟΥΡΓΙΑ ΑΕΒΕ ΤΑΚΤΙΚΗ ΓΕΝΙΚΗ ΣΥΝΕΛΕΥΣΗ ΤΩΝ ΜΕΤΟΧΩΝ 13 Ιανουαρίου 2018, ημέρα Σάββατο, ώρα 12:00

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. ii) Πόσες φορές θα εκτελεστεί η εντολή ΔΙΑΒΑΣΕ Α[μ,λ] στον αλγόριθμο της προηγούμενης ερώτησης; α) 35 β) 12 γ) 20

ΜΥΤΙΛΗΝΑΙΟΣ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΟΜΙΛΟΣ ΕΠΙΧΕΙΡΗΣΕΩΝ 2013 ΑΡ. Μ.Α.Ε /06/Β/90/26

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Διαδικασίες και συναρτήσεις. 22 Νοε 2008 Ανάπτυξη εφαρμογών/ Υποπρογράμματα 1

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Γλωσσική Τεχνολογία, Διδάσκων: Ι. Ανδρουτσόπουλος

ΣΧΕΔΙΟ ΑΡΘΡΟΥ 5 ΤΟΥ ΚΑΤΑΣΤΑΤΙΚΟΥ ΤΗΣ ΝΑΥΤΙΛΙΑΚΗΣ ΕΤΑΙΡΕΙΑΣ ΛΕΣΒΟΥ Α.Ε.

Επιτροπή Διαγωνισμού του περιοδικού. 2 ος Μαθητικός Διαγωνισμός «Παιχνίδι και Μαθηματικά»

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

«F.H.L. H. ΚΥΡΙΑΚΙΔΗΣ ΜΑΡΜΑΡΑ - ΓΡΑΝΙΤΕΣ ΑΝΩΝΥΜΗ ΒΙΟΜΗΧΑΝΙΚΗ ΚΑΙ ΕΜΠΟΡΙΚΗ ΕΤΑΙΡΕΙΑ»,

Τύποι δεδομένων, τελεστές, μεταβλητές

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

Transcript:

ΕΚΠΑ/ΕΜΠ ΔΠΜΣ ΤΕΧΝΟΓΛΩΣΣΙΑ Λογικός Προγραμματισμός Ακ. Έτος 2013-2014 Εξάμηνο Β Διδάσκων: καθ. Μαΐστρος Γιάνης Μηχανική Μετάφραση Αριθμητικών Καρβουνιάρη Δήμητρα Κωλέττη Ερασμία Παπαθανασοπούλου Γεωργία 1

prijatelju u nevolji je zaista prijatelj 2

1. Ο στόχος Ο στόχος μας είναι η μηχανική μετάφραση των αριθμητικών στην ολογραφική τους μορφή (είκοσι οκτώ, one hundred eleven) από το 0 έως και το 999. Η μετάφραση πρέπει να γίνει από τα ελληνικά στα αγγλικά και αντίστροφα. Περιοριζόμαστε στα απόλυτα αριθμητικά ουδέτερου γένους και δεν θα επεκταθούμε ούτε στα τακτικά αριθμητικά(πρώτος, second) ούτε στα άλλα γένη. Το πρόγραμμα υλοποιήθηκε στην έκδοση 6.1.1. της Prolog. 2.1 Η Βασική Ιδέα Η ελληνική γλώσσα δομεί την αριθμητική φράση αναλυτικά, θα μπορούσαμε να πούμε. Χρησιμοποίει δηλαδή μία λέξη για τις μονάδες, μία λέξη για τις δεκάδες, μία λέξη για τις εκατοντάδες και ούτω καθ εξής. εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 5 6 στα ελληνικά διακόσια πενήντα έξι εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 0 6 στα ελληνικά διακόσια - έξι εκατοντάδες δεκάδες μονάδες στα μαθηματικά 0 5 6 στα ελληνικά - πενήντα έξι Η γλώσσα δηλαδή κάνει ένα pattern-matching αρκετά ίδιο με αυτό της prolog. Αντίστοιχα στην αγγλική γλώσσα: εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 5 6 στα αγγλικά two-hundred fifty six εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 0 6 στα αγγλικά two-hundred - six εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 5 0 στα αγγλικά two-hundred fifty - 3

Η πρώτη γραμμή του πίνακα( στα μαθηματικά ) ταυτίζεται και στις δύο γλώσσες. Αυτό σημαίνει πως μπορούμε να χρησιμοποιήσουμε τους αριθμούς σαν ένα ενδιάμεσο επίπεδο μεταξύ των δύο γλωσσών (interlingua). στα ελληνικά στα μαθηματικά στα αγγλικά 2.2 Τι έχω ως τώρα -το μηχανισμό pattern-matching -το interlingua 2.3 Τι χρειάζομαι 3) Πώς θα χωρίσω τον αριθμό σε εκατοντάδες, δεκάδες και μονάδες; 4) Τι είναι σωστά ελληνικά (αποδεκτή ελληνική αριθμητική φράση ); 5) Τι είναι σωστά αγγλικά (αποδεκτή αγγλική αριθμητική φράση); 6) Τι μορφή θα δώσω στο λεξικό; 7) Πώς θα πραγματώσω το interlingua: -συνάρτηση από ελληνικά στα μαθηματικά -συνάρτηση από τα μαθηματικά στα αγγλικά -συνάρτηση από τα αγγλικά στα μαθηματικά -συνάρτηση από τα μαθηματικά στα ελληνικά 8) Από ποιες συναρτήσεις περνά η διαδικασία της μετάφρασης; 9) Τι σκέφτεται η Prolog όταν της ζητηθεί να μεταφράσει ένα αριθμητικό; 10) Πώς επιλύονται τα προβλήματα που ανακύπτουν; 11) Μπορώ να επεκτείνω το σύστημα; 4

3. Η συναρτήσεις num/2 και num1/2 Έχουν δύο ορίσματα, έναν ακέραιο και μία λίστα κεφαλή της οποίας είναι μία άλλη λίστα και ουρά ο ακέραιος. Χρησιμοποιούνται για να χωρίσουν έναν ακέραιο σε εκατοντάδες, δεκάδες και μονάδες τις τιμές των οποίων μετά καταχωρούν στη λίστα που δέχονται ως όρισμα. num1(x,[[y,z],x]) :- integer(x), X < 100, Y is floor(x / 10) * 10, Z is X mod 10. Για παράδειγμα η num1/2 δέχεται ως όρισμα ένα ακέραιο μικρότερο του 100 τον οποίο διαιρεί δια 10 (56/10=5,6) και στη συνέχεια τον πολλαπλασιάζει με το 10. Το ακέραιο μέρος του αποτελέσματος αποθηκεύεται στην Υ και το υπόλοιπο στη Ζ ( num1(56,[[5,6],56).). Κατά τη μετάφραση χρησιμοποιούνται και οι δύο συναρτήσεις. ελληνικά αγγλικά num/2 num1/2 4. Σωστά ελληνικά και αγγλικά. μαθηματικά Ο μεταφραστής δουλεύει με τη διαδικασία του pattern matching της prolog. Απαιτείται να περιγραφούν λοιπόν αναλυτικά τα patterns που αποδέχεται το πρόγραμμα μας από τη γλώσσα-πηγή, ώστε να παράγει την αντίστοιχη δομή στη γλώσσα-στόχο. Οι αποδεκτές δομές αλφαριθμητικών για τα ελληνικά και τα αγγλικά δίνονται σε μορφή DCG rules. Οι κανόνες αριθμητικής φράσης για τα ελληνικά είναι: ell(n) --> problima(n),!;ekatontades(n);dekades(n);monades(n). ell(n) --> ekatontades(n1),dekades(n2),monades(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12, N2+N3=\=11,N2+N3=\=12}. ell(n) --> dekades(n1),monades(n2), 23 {N is N1 + N2,N =\= 11, N =\= 12}. ell(n)-->ekatontades(n1),dekades(n2), 130 {N is N1 + N2,N =\= 11, N =\= 12}. ell(n)-->ekatontades(n1),monades(n2), 201 5 για τα 11,12,100,200, 10,20,1,2,3 256

{N is N1 + N2,N =\= 11, N =\= 12}. ell(n)-->ekatontades(n1),problima(n2), {N is N1 + N2,N2 =\= 100, N =\= 0}. Για τα 111,112 Οι κανόνες των αγγλικών σχηματίζονται αντίστοιχα. Η αριθμητική φράση (ell(n) και aggl(n)) δέχονται ως όρισμα μία ανώνυμη μεταβλητή, που παίρνει ως τιμή την αριθμητική αξία του αλφαριθμητικού (έναν ακέραιο). Σε μορφή DCG rules δίνονται επίσης οι συναρτήσεις problima(n),ekatontades(n), decades(n), monades(n) (και οι αντίστοιχες αγγλικές), πού δέχονται ως όρισμα ανώνυμη μεταβλητή. Η ανώνυμη μεταβλητή μπορεί να πάρει ως τιμή κάποια αριθμητική αξία (integer). monades(n) --> ena(n);duo(n);tria(n);tessera(n);pente(n);e3i(n);efta(n);oktw(n);ennia(n). 5. Το λεξικό Δημιουργούμε δύο λεξικά, ένα για την ελληνική και ένα για την αγγλική γλώσσα. Οι εγγραφές δίνονται σε μορφή DCG rules και στο RHS παίρνουμε το αλφαριθμητικό σε μορφή λίστας. Οι συναρτήσεις δέχονται ως όρισμα μία μεταβλητή που περιέχει την αριθμητική αξία του αλφαριθμητικού που υπάρχει στο RHS. mhden(0) --> [μηδέν]. zero(0) --> [zero]. 6. Το interlingua Για να πετύχω τη μετάφραση από τη μία γλώσσα στην άλλη μέσω interlingua χρειάζομαι -συνάρτηση από ελληνικά στα μαθηματικά -συνάρτηση από τα μαθηματικά στα αγγλικά -συνάρτηση από τα αγγλικά στα μαθηματικά -συνάρτηση από τα μαθηματικά στα ελληνικά Το ενδιάμεσο επίπεδο μεταξύ των δύο γλωσσών πραγματώνεται με τέσσερις συναρτήσεις ελληνικά αγγλικά greeknum/2 enlishnum/2 greekalpha/2 englishalpha/2 μαθηματικά 6

πηγή: ελληνικά, πηγή: αγγλικά αλφαριθμητικά σε integers integers σε αλφαριθμητικά greekalpha(y,x) :- ell(z,y,[]), num(x,[_,z]). englishnum(x,y) :- num1(x,[_,z]), aggl(z,y,[]). στόχος: αγγλικά englishalpha(y,x) :- aggl(z,y,[]), num1(x,[_,z]) greeknum(x,y) :- num(x,[_,z]), ell(z,y,[]). στόχος: ελληνικά Για να φτάσουμε στην τελική μετάφραση, συνδυάζουμε τις τέσσερις συναρτήσεις σε δύο, ακολουθώντας τη διαδρομή: ελληνικά μαθηματικά αγγλικά και αντίστροφα. Οι δύο τελικές συναρτήσεις δέχονται σαν όρισμα μία λίστα αλφαριθμητικών και μία ανώνυμη μεταβλητή και επιστρέφουν το αλφαριθμητικό-μετάφρασμα στη θέση της ανώνυμης μεταβλητής. από τα ελληνικά προς τα αγγλικά από τα αγγλικά προς τα ελληνικά translategreek(y,z) :- greekalpha(y,x), englishnum(x,z), write('το νούμερο'), write(y), write('στα αγγλικά είναι:'). translateenglish(y,z) :- englishalpha(y,x), greeknum(x,z), write('the number'), write(y), write('in Greek is:'). 7

7. Το πρόγραμμα ως τώρα ελληνικά αγγλικά greeknum/2 enlishnum/2 greekalpha/2 englishalpha/2 num/2 num1/2 μαθηματικά Ως τώρα έχουμε περιγράψει το δρόμο που ακολουθούμε για να μεταφράσουμε τα αλφαριθμητικά και αυτός δεν είναι άλλος από το υποχρεωτικό πέρασμα από το ενδιάμεσο επίπεδο των μαθηματικών, δηλαδή το interlingua. Θα μιλήσουμε στη συνέχεια για το όχημα που χρησιμοποιούμε προκειμένου να μεταβούμε από την γλώσσα-πηγή στη γλώσσα-στόχο. Το όχημα αυτό είναι οι ανώνυμες μεταβλητές. 8. Ανώνυμες μεταβλητές. Οι ανώνυμες μεταβλητές αντιστοιχίζονται με τυχαίες θέσεις μνήμης της Prolog. Ο στόχος που βάζω κάθε φορά που κάνω κλήση μίας συνάρτησης είναι να γεμίσω το περιεχόμενο της ανώνυμης μεταβλητής. Το περιεχόμενο αυτό στη συνέχεια θα μεταβιβαστεί στην επόμενη συνάρτηση μέσω του pattern-matching ή θα αλλάξει μορφή μέσω της συνάρτησης, ώστε να φορτωθεί σε μία νέα ανώνυμη μεταβλητή και να συνεχίσει την πορεία του. Η μετάφραση θα ολοκληρωθεί όταν αποκτήσει περιεχόμενο η ανώνυμη μεταβλητή της translategreek/2 ή της translateenglish/2. Θυμίζουμε ότι όλες οι συναρτήσεις του προγράμματος εκτός από τις συναρτήσεις num, δέχονται ως όρισμα κάποια ανώνυμη μεταβλητή. Στη συνέχεια θα προσπαθήσουμε να παρακολουθήσουμε μία απλή μετάφραση από τα ελληνικά στα αγγλικά με όχημα τις ανώνυμες μεταβλητές των συναρτήσεων. Το ερώτημα που θέτουμε είναι:?-:translategreek([ένα],χ). Η prolog δεσμεύει τη θέση μνήμης G4003 για την ανώνυμη μεταβλητή Χ. Όταν αυτή η θέση μνήμης γεμίσει, θα έχω απαντήσει το ερώτημά μου. (6) translategreek([ένα],g4003). 8

Η translategreek/2 καλεί τη συνάρτηση greekalpha/2. (7) greekalpha([ένα],g4079) Η θέση μνήμης G4079 δεσμεύεται για την ανώνυμη μεταβλητή της greekalpha και γίνεται η κλήση της ell. (8) ell(g4078, [ένα],[]) Η θέση μνήμης G4078 δεσμεύεται για την ανώνυμη μεταβλητή της ell. Τώρα ενεργοποιείται η διαδικασία pattern-matching της prolog και η ell προσπαθεί να ενοποιηθεί καταρχήν με κάποια από τις συναρτήσεις probima, ekatontades,dekades,monades και στη συνέχεια με κάθε ένα από τα αντίστοιχα entries του λεξικού. Πραγματοποιούνται αρκετοί έλεγχοι αφού η prolog εξετάζει όλες τις περιπτώσεις για κάθε συνάρτηση. Η ενοποίηση κάποια στιγμή θα επιτύχει ως εξής: (9) monades(g4078, [ένα],[]) επιτυγχάνει όταν συναντήσει στους κανόνες: monades(n) --> ena(n) (10) ena(g4078, [ένα],[]) επιτυγχάνει όταν συναντήσει στο λεξικό: ena(1) --> [ένα]. Η (10) και στη συνέχεια η (9) και η (8) αποδίδουν τιμή στην ανώνυμη μεταβλητή της: exit (10) ena[1,[ένα],[]) exit (9) monades(1,[ένα],[]) exit (8) ell(1,[ένα],[]). Μόλις η prolog αποδώσει σημασία στην ανώνυμη μεταβλητή της ell(ν) επανέρχεται στην (7) greekalpha/2 και καλεί το δεύτερο μέρος της δηλαδή τη num/2. Η κενή θέση μνήμης της num/2 (ανώνυμη μεταβλητή) γεμίζει με την τιμή 1. (8) num(g4081,[g4082,1] Η num/2 κάνει τα μαθηματικά της και μας επιστρέφει: exit (8) num(1,[[1],1]) Στην ουσία, το 1 που δέχεται ως όρισμα η num/2: -χωρίζεται σε μονάδες δεκάδες και εκατοντάδες στη θέση G4082 και -γεμίζει την θέση G4081 με την τιμή 1. Εφόσον και η ell(n) και η num/2 επιτυγχάνουν, επιτυγχάνει και η greekalpha/2 και αποδίδει την τιμή 1 στην ανώνυμη μεταβλητή της. 9

(7) greekalpha([ένα],1) Μέχρι τώρα έχει γίνει η μισή διαδικασία. Έχουμε δηλαδή την (7) η οποία μας δίνει ένα ελληνικό αλφαριθμητικό και την αριθμητική τιμή του. Έχουμε επιτύχει το πρώτο μέρος της translategreek/2 που ήταν η αρχική μας ερώτηση. Η συνέχεια των κλήσεων θα είναι αντίστροφη. Στόχος μας τώρα είναι να περάσουμε από μία αριθμητική τιμή σε ένα αγγλικό αλφαριθμητικό. Η translategreek/2 καλεί τη δεύτερη συνάρτησή της, την englishnum/2. (7) englishnum(1, G4003) Η englishnum/2 με τη σειρά της θα καλέσει την num1/2 δίνοντας την τιμή 1 στην πρώτη θέση και με τις δύο άλλες θέσεις μη στιγμιαιοποιημένες (uninstanciated). (8) num1(1, [G4080,G4083]) Η num1/2 ακολουθεί αντίστροφή πορεία από ότι η num/2 -δέχεται ως όρισμα το 1 -το χωρίζει σε μονάδες δεκάδες και εκατοντάδες στη θέση G4080 και -γεμίζει την θέση G4083 με την τιμή 1. exit(8) num1(1,[[1],1]) Τώρα η englishnum/2 καλεί την aggl(ν) και της αποδίδει την τιμή 1 δεσμεύοντας παράλληλα την θέση G4003 για το αγγλικό αλφαριθμητικό- στόχο. (8) aggl(1, G4003,[]) Η aggl(ν) ενεργοποιεί εκ νέου το pattern-matching. Επιλέγεται ο κανόνας που αντιστοιχεί στο pattern: aggl(n) units(n) Καταδύεται αρκετές φορές στους κανόνες (problem(n), hundreds(n),dozens(n), units(n)), και το λεξικό έως ότου να αναδυθεί η κατάλληλη εγγραφή του λεξικού. (9) units(1, G4003,[]) (10)one(1, G4003,[]) exit(10) one(1,[one],[]) Έχουμε λοιπόν ανασύρει από τα βάθη του λεξικού ένα pattern το οποίο μπορεί να εκπληρώσει όλους τους στόχους που είχαμε προηγουμένως θέσει. Έτσι οι συναρτήσεις επιτυγχάνουν μία προς μία. exit (9) units (1, [one], []) exit (8) aggl (1, [one],[]) exit(7) englishnum(1, [one]). 10

Έχουμε δηλαδή ένα αγγλικό αλφαριθμητικό και την αριθμητική τιμή του. Μπορεί να εκτελεστεί η translategreek/2. exit: (6) translategreek([ένα], [one]) 1?- translategreek([ένα],χ). Το νούμερο[ένα]στα αγγλικά είναι: Χ = [one]. 9. Όταν δυσκολεύουν τα πράγματα. Ο γενικός κανόνας πάνω στον οποίο χτίστηκε όλο το πρόγραμμα είναι ότι υπάρχει μία και μόνο λέξη που δηλώνει πλήθος μονάδων, μία και μόνη λέξη που δηλώνει πλήθος δεκάδων και μία και μόνη λέξη που δηλώνει πλήθος εκατοντάδων. Όπως κάθε κανόνας όμως, έτσι και αυτός, (ο οποίος φαίνεται να έχει μία διαγλωσσική ισχύ τουλάχιστον στις γλώσσες του.. σογιού μας) έχει και τις εξαιρέσεις του οι οποίες πρέπει να αντιμετωπιστούν με ειδικό χειρισμό. 9.1 Δύο λέξεις- μία σημασία. εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 5 6 στα αγγλικά two-hundred fifty six Η βολική ένα προς ένα αντιστοιχία παραβιάζεται στις αγγλικές εκατοντάδες. Το πρόβλημα λύνεται πολύ εύκολα χρησιμοποιώντας μονά εισαγωγικά ώστε η prolog να τα αντιμετωπίσει σαν μία οντότητα. Κατασκευάζουμε λοιπόν έτσι τις εγγραφές στο λεξικό και διατυπώνουμε προσεκτικά τα ερωτήματα. onehundred(100) --> ['one hundred']. twohundred(200) --> ['two hundred']. threehundred(300) --> ['three hundred']. 9.2 Δύο σημασίες-μία λέξη. Έντεκα Δεκάδες: μία. Μονάδες: μία. Λέξεις: μία. 11

εκατοντάδες δεκάδες μονάδες στα μαθηματικά 0 1 1 στα ελληνικά - έντεκα Περιπτώσεις όπως τα έντεκα, δώδεκα, eleven nineteen χρειάζονται εξαρχής ειδική μεταχείριση αφού δύο ιδιότητες του αριθμού συγχωνεύονται σε μία λέξη. Έτσι, διδάσκουμε τη num να αντιμετωπίζει αυτούς τους αριθμούς σαν κάτι ενιαίο και να επιστρέφει την ίδια τιμή τους χωρίς να την σπάει σε δεκάδες και μονάδες. num(11,[[11],11]):-!. Δημιουργούμε μία ειδική κατηγορία στο λεξικό όπου εντάσσονται αυτές οι περιπτώσεις. problima(n)--> mhden(n);enteka(n);dwdeka(n);ekato(n). Ταυτόχρονα δίνουμε τη δυνατότητα να αποτελέσουν αυτοδύναμη ελληνική αριθμητική φράση. ell(n) --> problima(n),!;ekatontades(n);dekades(n);monades(n). Τέλος, για να αποφύγουμε το να διαβαστεί η φράση και από τον κανόνα για εκατοντάδες, δεκάδες, μονάδες, προσθέτουμε σε αυτό τον κανόνα περιορισμό. Το άθροισμα της αριθμητικής αξίας εκατοντάδων, δεκάδων και μονάδων δεν πρέπει να είναι 11 ή 12. ell(n) --> ekatontades(n1),dekades(n2),monades(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12}. Αντίστοιχα διαμορφώνεται και το κομμάτι του προγράμματος για τα αγγλικά. 9.3 Δύο λέξεις-τρεις σημασίες. Εκατόν έντεκα. Εκατοντάδες: μία, δεκάδες: μία, μονάδες: μία. Λέξεις: δύο εκατοντάδες δεκάδες μονάδες στα μαθηματικά 1 1 1 στα ελληνικά εκατόν έντεκα Επέκταση του προβλήματος 9.3 με εισαγωγή των εκατοντάδων. Η λύση είναι αντίστοιχη. Δημιουργούμε κανόνα στην ell(n) που να δέχεται ως αριθμητική φράση δομές της μορφής <εκατοντάδες, έντεκα/δώδεκα>: ell(n)-->ekatontades(n1),problima(n2), {N is N1 + N2,N2 =\= 100, N2 =\= 0},!. 12

Ταυτόχρονα απαγορεύουμε στο πρόγραμμα να διαβάσει την είσοδο και με τον κανόνα για δομές της μορφής <εκατοντάδες, δεκάδες, μονάδες> περιορίζοντας το άθροισμα δεκάδων μονάδων σε διάφορο του 11,12 (και 13,14,15,16,17,18,19 για τα αγγλικά). ell(n) --> ekatontades(n1),dekades(n2),monades(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12, N2+N3=\=11,N2+N3=\=12}. 9.4 Τι είναι το μηδέν; Αυτού του είδους η αναλυτική προσέγγιση μας δημιουργεί πρόβλημα ως προς το πώς πρέπει να αντιμετωπιστεί το μηδέν. Κατά την ανάλυση σε εκατοντάδες, δεκάδες και μονάδες, προκύπτουν αρκετά ορφανά μηδενικά (πχ στα 101, 120 κτλ). Για το λόγο αυτό εντάσσουμε το μηδέν στον κανόνα του λεξικού για τους προβληματικούς αριθμούς. Έτσι, δεχόμαστε σαν αριθμητική φράση το μηδέν και το zero χωρίς να έχουμε εντάξει την αριθμητική τους αξία στις μονάδες. Ως τώρα έχουμε χρησιμοποιήσει δύο κανόνες για να δομήσουμε αριθμητική φράση. Ο προαιρετικός κανόνας που περιγράφει μονολεκτικές φράσεις: ell(n) --> problima(n),!;ekatontades(n);dekades(n);monades(n). και ο κανόνας για ρηματική φράση του τύπου εκατοντάδες-δεκάδες-μονάδες. ell(n) --> ekatontades(n1),dekades(n2),monades(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12} Φράσεις με τη δομή δεκάδες-μονάδες εύκολα αντιμετωπίζονται με ένα αντίστοιχο κανόνα: ell(n) --> dekades(n1),monades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. Ταυτόχρονα, πρέπει να αντιμετωπίσουμε τις περιπτώσεις όπου το μηδέν εμφανίζεται μέσα σε αριθμητική φράση. Σε αυτές τις περιπτώσεις ο πίνακας μονάδων-δεκάδωνεκατοντάδων έχει μία κενή στήλη. εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 0 6 στα αγγλικά two-hundred - six 13

Η ανωτέρω περίπτωση περιγράφεται από τον κανόνα: ell(n)-->ekatontades(n1),monades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. Και τέλος: εκατοντάδες δεκάδες μονάδες στα μαθηματικά 2 5 0 στα αγγλικά two-hundred fifty - ell(n)-->ekatontades(n1),dekades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. 9.5 Εκατό ή εκατόν; Το ελληνικό κομμάτι του μεταφραστή μας χρειάζεται επιπλέον ένα κανόνα ευαίσθητο στα συμφραζόμενα για να αποτυπώσει την εξής αμφισημία: one hundred εκατό one hundred twenty two εκατόν είκοσι δύο Για το λόγο αυτό φτιάχνουμε δύο διαφορετικές εγγραφές στο ελληνόγλωσσο λεξικό αφού η ίδια αριθμητική αξία (100) αποδίδεται με δύο διαφορετικές λέξεις. ekato(100)-->[εκατό]. ekaton(100) --> [εκατόν]. Επίσης εντάσσουμε την αξία του ekato στους κανόνες για τις περιπτώσεις που θέλουμε ειδικό χειρισμό. problima(n)--> mhden(n);enteka(n);dwdeka(n);ekato(n). και: ell(n) --> problima(n),!;ekatontades(n);dekades(n);monades(n). Τέλος, ο ρόλος του! στον κανόνα για την ell(n) είναι να αποτρέψει την prolog από το να εμφανίσει και το αποτέλεσμα εκατόν όταν γίνεται κλήση αυτού του κανόνα αφού το εκατόν ανήκει στην κατηγορία εκατοντάδες. 14

10. Επεκτάσεις- προεκτάσεις Το ενδιάμεσο επίπεδο (interlingua) που χρησιμοποιήθηκε για την μηχανική μετάφραση των αριθμητικών δεν είναι άλλο από τη διεθνή γλώσσα των αριθμών. Οι συναρτήσεις που το πραγματώνουν (num/2, num1/2 κτλ) είναι ουσιαστικά ίδιες. Επιπλέον, κάθε γλώσσα η οποία δομεί την αριθμητική φράση με παρόμοιο τρόπο, μπορεί να κωδικοποιηθεί με τους κανόνες για την αποδεκτή αριθμητική φράση που περιγράφτηκαν πιο πάνω. Μικρές ιδιοτυπίες όπως τα έντεκα, δώδεκα nineteen μπορούν αρκετά εύκολα να περιγραφούν από τέτοιους κανόνες. Έκτος λοιπόν από τo κοινό ενδιάμεσο επίπεδο στη μετάφραση σε ένα μεγάλο αριθμό γλωσσών έχουμε και κοινά patterns αριθμητικής φράσης. Συνεπώς, ο μεταφραστής προσφέρεται για επέκταση σε άλλες γλώσσες. Επιχειρήθηκε μία πρώτη απόπειρα να επεκταθεί ο μεταφραστής για τα γλωσσικά ζεύγη σέρβικα-ελληνικά και σέρβικα-αγγλικά. Η σέρβικη γλώσσα είναι μία ινδοευρωπαϊκή γλώσσα που ανήκει στην ομάδα των δυτικών νοτιοσλαβικών γλωσσών. Στόχος μας σε αυτό το report δεν είναι να περιγράψουμε αναλυτικά τους κανόνες δομή της σέρβικής αριθμητικής φράσης. Εντούτοις μπορούμε να πούμε πως αφ ενός η στιβαρότητα του interlingua αφ ετέρου δε οι κοινές δομές τόσο με τα ελληνικά όσο και με τα αγγλικά, διευκολύνουν την επέκταση στα συγκεκριμένα ζεύγη γλωσσών. Αρκούμαστε στο να πούμε πως η ιδιοτυπία των 11 19, που εμφανίζεται στα αγγλικά, παρουσιάζεται και εδώ. Εκατοντάδες (stotine) Δεκάδες (desetine) Μονάδες (jedinice) στα μαθηματικά 0 1 1 στα σέρβικα - jedanaest Ενδεικτικά παραθέτουμε τον κανόνα για τη συγκεκριμένη αριθμητική φράση: srpsk(n)-->stotine(n1),problem(n2), {N is N1 + N2,N =\= 0}. Μία τελική παρατήρηση που προέκυψε μετά την επέκταση του μεταφραστή είναι ότι αυξάνεται ο αριθμός των τελικών συναρτήσεων. Έχουμε δηλαδή μία συνάρτηση για κάθε γλωσσικό ζεύγος (τρίγλωσσος μεταφραστής σημαίνει έξι τελικές συναρτήσεις). Συστήματα που ενσωματώνουν περισσότερες γλώσσες λοιπόν θα ήταν θεμιτό να προβλεφθούν φιλικότερα προς το χρήστη δίνοντας την δυνατότητα να διατυπώνει queries απευθείας, μέσω κάποιου συστήματος διαλόγου ενδεχομένως. Έτσι, ο χρήστης εισάγει την προς μετάφραση λέξη καθώς και τις γλώσσες πηγή και στόχος, ενώ δεν θα χρειάζεται να καλεί ταυτόχρονα και τις αντίστοιχες συναρτήσεις. 15

Παραδείγματα?- translategreek([εκατόν,τριάντα,δύο],χ). Το νούμερο[εκατόν,τριάντα,δύο]στα αγγλικά είναι: Χ = ['one hundred', thirty, two] ; false.?- translategreek([τριάντα,δύο],χ). Το νούμερο[τριάντα,δύο]στα αγγλικά είναι: Χ = [thirty, two] ; false.?- translateenglish(['one hundred',twenty,nine],χ). The number[one hundred,twenty,nine]in Greek is: Χ = [εκατόν, είκοσι, εννιά] ; false.?- translateenglish(['one hundred',twenty],χ). The number[one hundred,twenty]in Greek is: Χ = [εκατόν, είκοσι] ; false.?- translateenglish(['one hundred',two],χ). The number[one hundred,two]in Greek is: Χ = [εκατόν, δύο] ; false. 16

?- grtosr([εκατόν,είκοσι,εφτά],χ). Ο αριθμός[εκατόν,είκοσι,εφτά]στα σέρβικα είναι: Χ = [sto, dvadeset, sedam] ; false.?- srtogr([sto,jedanaest],x). Broj[sto,jedanaest]na grckom je: X = [εκατόν, έντεκα].?- engtosr(['two hundred',thirty,seven],x). The number[two hundred,thirty,seven]in serbian is: X = ['dve stotine', trideset, sedam] ; false.?- srtoeng(['dve stotine',jedan],x). Broj[dve stotine,jedan]na engleskom je: X = ['two hundred', one] ; false.?- translategreek([εννιακόσια,ενενήντα,εννιά],χ). Το νούμερο[εννιακόσια,ενενήντα,εννιά]στα αγγλικά είναι: Χ = ['nine hundred', ninety, nine] ; false. 17

Κώδικας. %Φτιάχνουμε την δομή αριθμών για την ελληνική γλώσσα %χειριζόμαστε χωριστά τα 11,12 num(11,[[11],11]):-!. num(12,[[12],12]):-!. %κανόνας για 1-9 num(x,[[x],x]):- integer(x),x < 10,!. %κανόνας για 10,20,30...90 num(x,[[x],x]):- integer(x),x < 100, X mod 10 =:= 0,!. %κανόνες για Χ<100 όπου Χ/10 μας δίνει υπόλοιπο, πχ: 95 %Υ= το ακέραιο μέρος της διαίρεσης και Ζ= το υπόλοιπο num(x,[[y,z],x]) :- integer(x), X < 100, Y is floor(x / 10) * 10, Z is X mod 10,!. %κανόνες για Χ<1000 όπου Χ/100 μας δίνει υπόλοιπο %Ν= το ακέραιο μέρος της διαίρεσης Χ/100 πολλαπλασιασμένο επί 100 %Υ=το υπόλοιπο (δεκάδες) %Ζ=το υπόλοιπο (μονάδες) 18

num(x,[[n,y,z],x]) :- integer(x), X < 1000, N is floor(x / 100) * 100, Y is X mod 100-X mod 10, Z is X mod 1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Φτιάχνουμε την δομή αριθμών για την αγγλική γλώσσα num1(x,[[x],x]):- integer(x),x < 10,!. num1(x,[[x],x]):- integer(x),x < 100, X mod 10 =:= 0,!. num1(x,[[y,z],x]) :- integer(x), X < 100, Y is floor(x / 10) * 10, Z is X mod 10,!. num1(x,[[n,y,z],x]) :- integer(x), X < 1000, N is floor(x / 100) * 100, Y is X mod 100-X mod 10, Z is X mod 10. num1(11,[[11],11]):-!. num1(12,[[12],12]):-!. num1(13,[[13],13]):-!. num1(14,[[14],14]):-!. num1(15,[[15],15]):-!. num1(16,[[16],16]):-!. num1(17,[[17],17]):-!. num1(18,[[18],18]):-!. 19

num1(19,[[19],19]):-!. %Επιτρεπτή ελληνική αριθμητική φράση ell(n)-->ekatontades(n1),problima(n2), {N is N1 + N2,N2 =\= 100, N2 =\= 0},!. ell(n) --> problima(n),!;ekatontades(n);dekades(n);monades(n). ell(n) --> ekatontades(n1),dekades(n2),monades(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12,N2+N3=\=11,N2+N3=\=12}. ell(n) --> dekades(n1),monades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. ell(n)-->ekatontades(n1),dekades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. ell(n)-->ekatontades(n1),monades(n2), {N is N1 + N2,N =\= 11, N =\= 12}. % Κατηγορίες λεξικού problima(n)--> mhden(n);enteka(n);dwdeka(n);ekato(n). ekatontades(n)--> ekaton(n);diakosia(n);triakosia(n);tetrakosia(n);pentakosia(n); e3akosia(n);eftakosia(n);oktakosia(n);eniakosia(n). dekades(n) --> deka(n);eikosi(n);trianta(n);saranta(n);penhnta(n); e3hnta(n);ebdomhnta(n);ogdonta(n);enenhnta(n). monades(n) --> ena(n);duo(n);tria(n);tessera(n);pente(n); e3i(n);efta(n);oktw(n);ennia(n). %λεξικό mhden(0) --> [μηδέν]. 20

ena(1) --> [ένα]. duo(2) --> [δύο]. tria(3) --> [τρία]. tessera(4) --> [τέσσερα]. pente(5) --> [πέντε]. e3i(6) --> [έξι]. efta(7) --> [εφτά]. oktw(8) --> [οχτώ]. ennia(9) --> [εννιά]. deka(10) --> [δέκα]. enteka(11) --> [έντεκα]. dwdeka(12) --> [δώδεκα]. eikosi(20) --> [είκοσι]. trianta(30) --> [τριάντα]. saranta(40) --> [σαράντα]. penhnta(50) --> [πενήντα]. e3hnta(60) --> [εξήντα]. ebdomhnta(70) --> [εβδομήντα]. ogdonta(80) --> [ογδόντα]. enenhnta(90) --> [ενενήντα]. ekato(100)-->[εκατό]. ekaton(100) --> [εκατόν]. diakosia(200) --> [διακόσια]. triakosia(300) --> [τριακόσια]. tetrakosia(400) --> [τετρακόσια]. pentakosia(500) --> [πεντακόσια]. e3akosia(600) --> [εξακόσια]. eftakosia(700) --> [εφτακόσια]. oktakosia(800) --> [οχτακόσια]. eniakosia(900) --> [εννιακόσια]. 21

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%Επιτρεπτή αγγλική αριθμητική φράση %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% aggl(n)-->hundreds(n1),problem(n2), {N is N1 + N2,N =\= 0},!. aggl(n) --> problem(n);hundreds(n);dozens(n);units(n). aggl(n) --> hundreds(n1),dozens(n2),units(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19,N2+N3=\=11,N2+N3=\=12,N2+N3=\=13,N2+N3=\=14,N2+N3=\=15,N2+N3=\=16,N2+N3=\=17,N2+N3=\=18,N2 +N3=\=19}. aggl(n) --> dozens(n1),units(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. aggl(n)-->hundreds(n1),dozens(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. aggl(n)-->hundreds(n1),units(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. %Κατηγορίες λεξικού problem(n)--> zero(n);eleven(n);twelve(n);thirteen(n);fourteen(n);fifteen(n);sixteen(n);seventeen(n);eighteen(n);nineteen(n). hundreds(n)--> onehundred(n);twohundred(n);threehundred(n);fourhundred(n);fivehundred(n); sixhundred(n);sevenhundred(n);eighthundred(n);ninehundred(n). dozens(n) --> ten(n);twenty(n);thirty(n);fourty(n);fifty(n); sixty(n);seventy(n);eighty(n);ninety(n). units(n) --> one(n);two(n);three(n);four(n);five(n); six(n);seven(n);eight(n);nine(n). 22

%Αγγλικό λεξικό zero(0) --> [zero]. one(1) --> [one]. two(2) --> [two]. three(3) --> [three]. four(4) --> [four]. five(5) --> [five]. six(6) --> [six]. seven(7) --> [seven]. eight(8) --> [eight]. nine(9) --> [nine]. ten(10) --> [ten]. eleven(11) --> [eleven]. twelve(12) --> [twelve]. thirteen(13) --> [thirteen]. fourteen(14) --> [fourteen]. fifteen(15) --> [fifteen]. sixteen(16) --> [sixteen]. seventeen(17) --> [seventeen]. eighteen(18) --> [eighteen]. nineteen(19) --> [nineteen]. twenty(20) --> [twenty]. thirty(30) --> [thirty]. fourty(40) --> [fourty]. fifty(50) --> [fifty]. sixty(60) --> [sixty]. seventy(70) --> [seventy]. eighty(80) --> [eighty]. ninety(90) --> [ninety]. onehundred(100) --> ['one hundred']. 23

twohundred(200) --> ['two hundred']. threehundred(300) --> ['three hundred']. fourhundred(400) --> ['four hundred']. fivehundred(500) --> ['five hundred']. sixhundred(600) --> ['six hundred']. sevenhundred(700) --> ['seven hundred']. eighthundred(800) --> ['eight hundred']. ninehundred(900) --> ['nine hundred']. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Τελικές συναρτήσεις %%τα νούμερα τα κάνει ελληνικά αλφαριθμητικά greeknum(x,y) :- num(x,[_,z]), ell(z,y,[]). %%τα νούμερα τα κάνει αγγλικά αλφαριθμητικά englishnum(x,y) :- num1(x,[_,z]), aggl(z,y,[]). %%ελληνικά αλφαριθμητικά τα κάνει νούμερα greekalpha(y,x) :- ell(z,y,[]), num(x,[_,z]). %%αγγλικά αλφαριθμητικά τα κάνει νούμερα englishalpha(y,x) :- aggl(z,y,[]), num1(x,[_,z]). %τελική μετάφραση από τα ελληνικά στα αγγλικά 24

translategreek(y,z) :- greekalpha(y,x), englishnum(x,z), write('το νούμερο'),write(y),write('στα αγγλικά είναι:'). %τελική μετάφραση από τα αγγλικά στα ελληνικά translateenglish(y,z) :- englishalpha(y,x), greeknum(x,z), write('the number'),write(y),write('in Greek is:'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %ερωτήσεις?- translategreek([ένα],x). %?- translateenglish([one],x). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %επέκταση για μετάφραση στα ζεύγη σέρβικα-ελληνικά και σέρβικα-αγγλικά %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%Φτιάχνουμε την δομή αριθμών για την σερβική γλώσσα num2(x,[[x],x]):- integer(x),x < 10,!. num2(x,[[x],x]):- integer(x),x < 100, X mod 10 =:= 0,!. num2(x,[[y,z],x]) :- integer(x), X < 100, Y is floor(x / 10) * 10, Z is X mod 10,!. num2(x,[[n,y,z],x]) :- 25

num2(11,[[11],11]):-!. num2(12,[[12],12]):-!. num2(13,[[13],13]):-!. num2(14,[[14],14]):-!. num2(15,[[15],15]):-!. num2(16,[[16],16]):-!. num2(17,[[17],17]):-!. num2(18,[[18],18]):-!. num2(19,[[19],19]):-!. integer(x), X < 1000, N is floor(x / 100) * 100, Y is X mod 100-X mod 10, Z is X mod 10. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%επιτρεπτή σέρβικη αριθμητική φράση %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% srpsk(n)-->stotine(n1),problemsrpsk(n2), {N is N1 + N2,N2 =\= 100, N2 =\= 0},!. srpsk(n) --> problemsrpsk(n);stotine(n);desetine(n);jedinice(n). srpsk(n) --> stotine(n1),desetine(n2),jedinice(n3), {N is N1 + N2 + N3,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19,N2+N3=\=11,N2+N3=\=12,N2+N3=\=13,N2+N3=\=14,N2+N3=\=15,N2+N3=\=16,N2+N3=\=17,N2+N3=\=18,N2 +N3=\=19}. srpsk(n) --> desetine(n1),jedinice(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. srpsk(n)-->stotine(n1),desetine(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. srpsk(n)-->stotine(n1),jedinice(n2), {N is N1 + N2,N =\= 11, N =\= 12, N =\= 13, N =\= 14, N =\= 15, N =\= 16, N =\= 17, N =\= 18, N =\= 19}. srpsk(n)-->stotine(n1),problem(n2), {N is N1 + N2,N =\= 0}. 26

%%%%%%%%%%Κανόνες problemsrpsk(n)--> nula(n);jedanaest(n);dvanaest(n);trinaest(n);cetrnaest(n);petnaest(n);sesnaest(n);sedamnaest(n);osamnaest(n );dvetnaest(n). stotine(n)--> sto(n);dvestotine(n);tristotine(n);cetiristotine(n);petstotina(n); seststotina(n);sedamstotina(n);osamstotina(n);devetstotina(n). desetine(n) --> deset(n);dvadeset(n);trideset(n);cetrdeset(n);pedeset(n); sezdeset(n);sedamdeset(n);osamdeset(n);devedeset(n). jedinice(n) --> jedan(n);dva(n);tri(n);cetiri(n);pet(n); sest(n);sedam(n);osam(n);devet(n). %%%Σέρβικο λεξικό nula(0) --> [nula]. jedan(1) --> [jedan]. dva(2) --> [dva]. tri(3) --> [tri]. cetiri(4) --> [cetiri]. pet(5) --> [pet]. sest(6) --> [sest]. sedam(7) --> [sedam]. osam(8) --> [osam]. devet(9) --> [devet]. deset(10) --> [deset]. jedanaest(11) --> [jedanaest]. dvanaest(12) --> [dvanaest]. trinaest(13) --> [trinaest]. cetrnaest(14) --> [cetrnaest]. petnaest(15) --> [petnaest]. sesnaest(16) --> [sesnaest]. sedamnaest(17) --> [sedamnaest]. 27

osamnaest(18) --> [osamnaest]. dvetnaest(19) --> [dvetnaest]. dvadeset(20) --> [dvadeset]. trideset(30) --> [trideset]. cetrdeset(40) --> [cetrdeset]. pedeset(50) --> [pedeset]. sezdeset(60) --> [sezdeset]. sedamdeset(70) --> [sedamdeset]. osamdeset(80) --> [osamdeset]. devedeset(90) --> [devedeset]. sto(100) --> [sto]. dvestotine(200) --> ['dve stotine']. tristotine(300) --> ['tri stotine']. cetiristotine(400) --> ['cetiri stotine']. petstotina(500) --> ['pet stotina']. seststotina(600) --> ['sest stotina']. sedamstotina(700) --> ['sedam stotina']. osamstotina(800) --> ['osam stotina']. devetstotina(900) --> ['devet stotina']. %Τελικές συναρτήσεις %%τα νούμερα τα κάνει σέρβικα αλφαριθμητικά srpsknum(x,y) :- num2(x,[_,z]), srpsk(z,y,[]). %%τα σέρβικα αλφαριθμητικά τα κάνει νούμερα srpskalpha(y,x) :- srpsk(z,y,[]), num2(x,[_,z]). 28