Καλησπέρα σε όλους.
Έχω φτιάξει στην F# μία συνάρτηση (primesTo x) που επιστρέφει μία λίστα από όλους τους ακέραιους διαιρέτες μίας ακολουθίας αριθμών. Δηλαδή, για είσοδο x θα επιστρέψει μία λίστα διάστασης x, όπου κάθε στοιχείο της λίστας θα περιέχει τους ακέραιους διαιρέτες όλων των ακέραιων από το 1 μέχρι το x. Για παράδειγμα, για είσοδο "10":
> primesTo 10;;
val it : int list list =
[[1]; [2; 1]; [3; 1]; [4; 2; 1]; [5; 1]; [6; 3; 2; 1]; [7; 1]; [8; 4; 2; 1];
[9; 3; 1]; [10; 5; 2; 1]]
>
Επίσης, έχω και μία άλλη (divs x) που χρησιμοποιείται από την primesTo, η οποία επιστρέφει μία λίστα από όλους τους ακέραιους διαιρέτες ενός αριθμού (εκτός του εαυτού του). Παράδειγμα:
> divs 10;;
val it : int list = [5; 2; 1]
>
Τις συναρτήσεις αυτές τις έβαλα σε μία βιβλιοθήκη και θέλω να τις καλέσω από ένα WebForms C# project. Ενώ λοιπόν η κλήση για την divs τρέχει κανονικά, όπως φαίνεται εδώ:
foreach (int i in TestFSharp.divs(10))
{
this.listBox1.Items.Add(i.ToString());
}
στην κλήση της primeTo μου χτυπά exception "EntryPointNotFound".
System.EntryPointNotFoundException was unhandled
HResult=-2146233053
Message=Entry point was not found.
Παραθέτω και τον C# κώδικα που καλεί την primeTo (δοκιμάζω με τιμές τάξεως του 10):
List<int> innerList = new List<int>();
List<List<int>> returnList = new List<List<int>>();
foreach (FSharpList<int> l in TestFSharp.primesTo(10))
{
foreach (int v in l)
{
innerList.Add(v);
}
returnList.Add(innerList);
}
return returnList;
Με λίγα λόγια, η primeTo επιστρέφει μία nested FSharpList<FSharpList<int>> που θεωρώ έχει interface IEnumerable (αφού μπορεί και κάνει iteration σε FSharpList). Το πρόβλημα που αντιμετωπίζω είναι επειδή κάνω κάτι λάθος εγώ, ή υπάρχει κάποιος ειδικός χειρισμός στην κλήση nested λιστών έξω από το περιβάλλον της F#;
Αν θέλετε, να βάλω και τον κώδικα της F#, ωστόσο οι συναρτήσεις στο FSI εκτελούνται κανονικά χωρίς πρόβλημα όπως είδαμε και πιο πάνω, ακόμα και για αριθμούς της τάξεως 10^5, οπότε τον παραλείπω για να μη μεγαλώσει πολύ το post. Το πρόβλημά μου εμφανίζεται αποκλειστικά στην C#.
Ευχαριστώ εκ των προτέρων.
Θέμης
twitter: @devopterios