Donc, je lis la « Programmation fonctionnelle à Scala » et je fais l'exercice 2.2Comment le travail de && dans un scala foldleft
Mettre en œuvre IsSorted, qui vérifie si un tableau [A] est triée selon une fonction de comparaison suivant: def IsSorted [a] (comme: Array [a], commandé: (a, a) => Boolean): Boolean = {
Ma solution, qui fonctionne
{
def orderByValue(a : Int, b : Int): Boolean ={
println (a + " " + b)
if(a<= b) true
else false
}
//exercise, def to check wheter an Array[a] is sorted
def isSorted[A] (as: Array[A], ordered: (A,A) => Boolean) : Boolean = {
var result = true;
def loop(n: Int) {
if (result == false)
false //Return false on first instance
else if (n < as.length -1) {
result = ordered(as(n), as(n + 1))
loop(n + 1)
}
else
result
}
loop(0)
result
}
}
Était assez fier de mon premier départ, mais pensé il ne semble pas très fonctionnel, donc je demande à un ami et il est revenu avec
{
def isSorted2[A] (as: Array[A], ordered: (A,A) => Boolean) : Boolean = {
as.sliding(2,1).foldLeft(true)((res, a) => ordered(a(0), a(1)) && res)
}
}
Comme wtf, comment cette magie noire possible. Je comprends tout de as.sliding (2,1) .foldLeft (vrai) ((res, a) => commandé (un (0), un (1)), mais le & & respart, je ne peux pas voir à trouver toute la documentation à ce sujet. Je sais qu'il plie le résultat de l'opération précédente, mais comment ça marche, quelle est cette opération appelée.
'' && est l'opérateur logique AND. Il combine le résultat précédent avec la valeur suivante de la séquence, par ex. 'true && false' – Eric
Rien de spécifique à propos de' foldLeft' il ya – cchantep