2017-08-28 5 views
0

Est-il possible d'intégrer la fonction my dans l'extrait de code suivant?Lazy arguments in lambda

import scala.annotation.tailrec 


object Ex14AppendViaFold extends App { 
    val l = List[Int](1, 2, 3, 4) 
    val l2 = List[Int](9, 8, 7, 6) 

    def append[A](l1: => List[A], l2: => List[A]) = { 
    def my(acc: => List[A], e: => A) = Cons(e, acc): List[A] 

    List.foldLeft(List.reverse(l1), l2)(my) 
    } 

    println(append(l, l2)) 
} 

sealed trait List[+A] 
case object Nil extends List[Nothing] 
case class Cons[+A](head: A, tail: List[A]) extends List[A] 


object List{ 
    def apply[A](as: A*): List[A] = // Variadic function syntax 
    if (as.isEmpty) Nil 
    else Cons(as.head, apply(as.tail: _*)) 

    def reverse[A](l :List[A]) = 
    List.foldLeft[A, List[A]](l,Nil)((acc, elem) => Cons(elem,acc)) 

    @tailrec 
    def foldLeft[A,B](l: List[A], z: B)(f: (=> B, => A) => B): B = l match { 
     case Cons(h, tail) => foldLeft(tail, f(z, h))(f) 
     case Nil => z 
    } 
} 
+2

Avez-vous essayé? – cchantep

+0

https://stackoverflow.com/questions/28876368/scala-by-name-parameter-on-a-anonymous-function –

+0

Cher @StefanK. , êtes-vous satisfait de la [réponse] (https://stackoverflow.com/a/45924391/5249621)? Je vous remercie. –

Répondre

1

Basé sur this réponse:

List.foldLeft(List.reverse(l1), l2)(
    ((acc, e) => Cons(e, acc)): ((=> List[A], => A) => List[A]) 
) 

Vous pouvez spécifier le type de lambda.

+0

Bien que cet extrait de code puisse résoudre le problème, il n'explique pas pourquoi ou comment il répond à la question. S'il vous plaît [inclure une explication pour votre code] (// meta.stackexchange.com/q/114762/269535), car cela aide vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. ** Flaggers/reviewers: ** [Pour les réponses à code unique comme celui-ci, downvote, ne pas supprimer!] (// meta.stackoverflow.com/a/260413/2747593) – Patrick

+1

@Patrick Merci de votre aide moi, j'ai légèrement modifié ma réponse. –