Je suis un Scala noob. J'ai décidé d'écrire une araignée solitaire solitaire comme premier exercice pour apprendre la langue et la programmation fonctionnelle en général.
Je voudrais générer un jeu de cartes de 1, 2 ou 4 costumes. Voici ce que je suis venu avec: p> qui devrait renvoyer p> en fonction de la valeur des numéros de numéros, sauf là-bas Aucune liste "Multiplier" de liste que je peux trouver. Ai-je manqué? Existe-t-il un meilleur moyen de générer le pont complet avant de se dépasser? P> BTW, je prévois d'utiliser une énumération pour les costumes, mais il était plus facile de taper ma question avec des chaînes. Je prendrai la liste générée ci-dessus et en utilisant une compréhension, itérale sur les costumes et une liste similaire de la carte "rangs" pour générer un pont complet. P> p>
4 Réponses :
aplaticez une liste finie des listes: aplaticez un flux de listes infini, prenez les premiers n éléments: p> scala> Stream.continually(List(1, 2, 3, 4)).flatten.take(8).toList
res19: List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4)
Est-ce une nouvelle méthode en 2.8.0? Je ne pouvais pas le faire travailler, mais cela fait: Val costumes = liste ("clubs", "diamants", "cœurs", "pique"); List.flaTEN (list.make (4, costumes.take (1))), où le "1" est la valeur de "1".
Oui, certains d'entre eux sont nouveaux en 2.8.
Vous pouvez développer une séquence numérique et platmap code> au lieu de la multiplication. scala> List(1,2,3)*4
res2: List[Int] = List(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
Dans SCALA 2.13.4, Scala> Liste (1,2,3) * 4 Code> Soulevez une erreur: Erreur: valeur * n'est pas membre de la liste [int] code>
Vous devriez rechercher Scaladoc pour l'objet Liste code>. Il a toutes les manières de méthodes intéressantes de création de listes. Par exemple, ce qui suit est exactement ce que vous essayiez de: List.tabulate(4)(i => suits.apply(i % numberOfSuits))
J'ai essayé votre exemple, mais obtenez une erreur sur 2.8.0.BETA1-PRERELEASe. En fait, j'obtiens cette erreur sur la plupart des échantillons de liste .Tabulat que je peux trouver. Ce qui donne? SCALA> LIST.TABULE (4, I => SUITS.Apply (I% Numberofsuits))
@Adam La syntaxe a légèrement changé de 2,7 à 2,8. Voir la réponse éditée.
Drôle, tu devrais le mentionner. J'ai oublié que les Docs Singleton étaient au bas des pages Doc Package. Dans le commentaire que j'ai écrit ci-dessus, j'ai proposé la même réponse exacte i> la même réponse que vous avez offerte d'abord ci-dessus.
Ce code ici list.tabulate (4, i => costumes.apply (i% numbersuits)) code> ne nécessite pas appliquer code> appel. Je changerais cela en List.Tabuler (4, I => Costudes (i% Numberofsuits)) Code>
Si vous utilisez la bibliothèque code> CATS CODE>, vous pouvez utiliser SEMRUROUP CODE> METHE Combinen code>. Il répète une liste n code> fois. import cats.implicits._
import cats.syntax.semigroup._
scala> List("clubs", "diamonds", "hearts", "spades").combineN(2)
res1: List[String] = List(clubs, diamonds, hearts, spades, clubs, diamonds, hearts, spades)
@ Saibō Que CATS code> utilisez-vous?
La partie intéressante de ce projet créera les générations immuables du tableau (mise en page actuelle des cartes). Je demande au tableau actuel pour une liste de mouvements légaux, renvoyés sous forme de tuples de (colonne source, colonne de destination et position source). J'applique ensuite chacun au tableau actuel de manière récursive en utilisant une sorte d'algorithme mini-max pour trouver le "meilleur" mouvement. Je souhaite aussi que l'objet de la carte soit immuable, de sorte que les tableaux ("Tableaux?") Devront savoir si une carte est confrontée.