Βρόχοι

Βρόχοι While

Syntax:

while <expression1> do <expression2>
until <expression1> do <expression2>
do <expression2> while <expression1>
do <expression2> until <expression1>

These are similar to other languages. However, as in GEL it is simply an expression that must have some return value, these constructs will simply return the result of the last iteration or NULL if no iteration was done. In the boolean expression, = is translated into == just as for the if statement.

Βρόχοι For

Σύνταξη:

for <identifier> = <from> to <to> do <body>
for <identifier> = <from> to <to> by <increment> do <body>

Βρόχος με αναγνωριστικό ορίζεται για όλες τις τιμές από το <from> μέχρι το <to>, χρησιμοποιώντας προαιρετικά μια αύξηση άλλη από 1. Αυτοί είναι γρηγορότεροι, πιο ωραίοι και περισσότερο συμπαγείς από τους κανονικούς βρόχους όπως παραπάνω, αλλά λιγότερο ευέλικτοι. Το αναγνωριστικό πρέπει να είναι ένα αναγνωριστικό και δεν μπορεί να είναι μια αποαναφορά. Η τιμή του αναγνωριστικού είναι η τελευταία τιμή του ή <from> αν το σώμα δεν υπολογίστηκε ποτέ. Η μεταβλητή εγγυάται την αρχικοποίηση μετά από ένα βρόχο, έτσι μπορείτε να την χρησιμοποιήσετε με ασφάλεια. Επίσης τα <from>, <to> και <increment> πρέπει να είναι μη μιγαδικές τιμές. Το <to> δεν είναι βέβαιο ότι θα επιτευχθεί, αλλά δεν θα ξεπεραστεί ποτέ, για παράδειγμα το παρακάτω εκτυπώνει περιττούς αριθμούς από 1 έως 19:

for i = 1 to 20 by 2 do print(i)

When one of the values is a floating point number, then the final check is done to within 2^-20 of the step size. That is, even if we overshoot by 2^-20 times the "by" above, we still execute the last iteration. This way

for x = 0 to 1 by 0.1 do print(x)

does the expected even though adding 0.1 ten times becomes just slightly more than 1.0 due to the way that floating point numbers are stored in base 2 (there is no 0.1, the actual number stored is just ever so slightly bigger). This is not perfect but it handles the majority of the cases. If you want to avoid dealing with this issue, use actual rational numbers for example:

for x = 0 to 1 by 1/10 do print(x)

This check is done only from version 1.0.16 onwards, so execution of your code may differ on older versions.

Βρόχοι Foreach

Σύνταξη:

for <identifier> in <matrix> do <body>

Για κάθε στοιχείο στον πίνακα, πηγαίνοντας γραμμή ανά γραμμή από αριστερά προς τα δεξιά, εκτελούμε το σώμα με το αναγνωριστικό ορισμένο στο τρέχον στοιχείο. Για να εκτυπώσετε τους αριθμούς 1,2,3 και 4 με αυτήν τη σειρά θα μπορούσατε να κάνετε:

for n in [1,2:3,4] do print(n)

Αν επιθυμείτε να διασχίσετε τις γραμμές και τις στήλες ενός πίνακα, μπορείτε να χρησιμοποιήσετε τις συναρτήσεις RowsOf και ColumnsOf που επιστρέφουν ένα διάνυσμα γραμμών ή στηλών του πίνακα. Έτσι, το

for n in RowsOf ([1,2:3,4]) do print(n)

θα εκτυπώσει [1,2] και έπειτα [3,4].

Break και Continue (διακοπή και συνέχιση)

Μπορείτε επίσης να χρησιμοποιήσετε τις εντολές break και continue σε βρόχους. Η εντολή continue θα επανεκκινήσει τον τρέχοντα βρόχο στην επόμενη του επανάληψη, ενώ η εντολή break φεύγει από τον τρέχοντα βρόχο.

while(<expression1>) do (
  if(<expression2>) break
  else if(<expression3>) continue;
  <expression4>
)