Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
267 views

Στη διαφάνεια 29 του lecture 4 υπάρχει ο παρακάτω κώδικας:

Κώδικας από διαφάνεια

Δεν καταλαβαίνω πώς η συνάρτηση εφαρμόζεται στη λίστα [1,2,3,4] στην τελευταία γραμμή. Επειδη δε βαλαμε ; μετα το end;


Edit: Ξανάγραψα την ερώτηση και παραθέτω παρακάτω την αρχική της μορφή.

Τίτλος: lecture 4 slide 29 γιατι εφαρμοζει τη συναρτηση στη λιστα που γραφουμε απο κατω?

Οριζουμε μια συναρτηση απο πανω και μετα το end απλως γραφουμε μια λιστα, πως ξερει αυτος οτι θελουμε η συναρτηση να εφαρμοστει στη λιστα αυτη? Επειδη δε βαλαμε ; μετα το end?

in pl1 by (190 points)
edited by | 267 views

1 Answer

+2 votes
Best answer

Στο toplevel της SMLNJ οι εκφράσεις που δίνουμε για αποτίμηση τερματίζονται με ;. στον παραπάνω κώδικα επομένως, δίνεται πρώτα ο ορισμός μίας συνάρτησης (από το let μέχρι και το end), ο οποίος ακολουθείται από την παράμετρο (λίστα [1,2,3,4]) με την οποία θέλουμε να καλέσουμε αυτή τη συνάρτηση.

Αν είχαμε βάλει ; αμέσως μετά το end, τότε θα είχαμε τερματίσει αυτό που δίνουμε στο toplevel αμέσως μετά τον ορισμό της συνάρτησης. H SMLNJ θα είχε απαντήσει:

- let
=   val rec f =
=     fn x => if null x then nil
=             else (hd x + 3) :: f (tl x)
= in
=   f
= end;
val it = fn : int list -> int list
by (9.5k points)
selected by

301 questions

289 answers

288 comments

769 users