2017-08-18 1 views
2

Je reçois une erreur lorsque j'essaie d'envoyer une matrice dans un proc. Je suis sûr que je fais quelque chose de très mal, je ne peux pas le comprendre.Envoi d'une matrice en tant qu'argument proc dans la colonne

use LinearAlgebra;  
proc main() { 
    var A = Matrix(
     [0.0, 0.8, 1.1, 0.0, 2.0] 
     ,[0.8, 0.0, 1.3, 1.0, 0.0] 
     ,[1.1, 1.3, 0.0, 0.5, 1.7] 
     ,[0.0, 1.0, 0.5, 0.0, 1.5] 
     ,[2.0, 0.0, 1.7, 1.5, 0.0] 
    ); 

    check_dims(A); 
} 

proc check_dims(A: Matrix) { 
    var t: bool = false; 
    if (A.domain.dim(1) == A.domain.dim(2)){ 
    t = true; 
    } 
    return t; 
} 

Ça me donne

mad.chpl:3: In function 'main': 
mad.chpl:14: error: unresolved call 'check_dims([domain(2,int(64),false)] real(64))' 
mad.chpl:17: note: candidates are: check_dims(A: Matrix) 

J'utilise chpl Version 1.15.0

Répondre

1

objets d'algèbre linéaire (comme matrices et vecteurs) sont represented as arrays dans la chapelle. Par conséquent, le changement Matrix (un type qui n'existe pas) à [] (la syntaxe de type réseau) devrait fonctionner comme prévu:

use LinearAlgebra;  
proc main() { 
    var A = Matrix(
     [0.0, 0.8, 1.1, 0.0, 2.0] 
     ,[0.8, 0.0, 1.3, 1.0, 0.0] 
     ,[1.1, 1.3, 0.0, 0.5, 1.7] 
     ,[0.0, 1.0, 0.5, 0.0, 1.5] 
     ,[2.0, 0.0, 1.7, 1.5, 0.0] 
    ); 

    check_dims(A); 
} 

proc check_dims(A: []) { 
    var t: bool = false; 
    // method is dim() 
    if (A.domain.dim(1) == A.domain.dim(2)){ 
    t = true; 
    } 
    return t; 
} 
+1

Side note: [ 'isSquare()'] (http: // chapelle. cray.com/docs/1.15/modules/packages/LinearAlgebra.html#LinearAlgebra.isSquare) pourrait accomplir ce que vous essayez de faire avec 'check_dims()' – bencray

+1

vous rentrez à la maison, bencray –

+1

@bencray: Est-ce clair pour vous pourquoi le compilateur accepte même Matrix comme type formel? Existe-t-il un alias de type ou de type avec le nom 'Matrix'? Est-ce un cas où le compilateur est trop permissif (par exemple, autoriser l'utilisation d'un nom de fonction autre que le type comme identificateur de type?) – Brad