2016-12-19 2 views
0

J'ai écrit cette vérification de la propriété dans haskell:Définition d'une propriété dans Haskel localement

prop_XY (x,y) sud = ((!!) (rows (sud)) x) !! y 

et je dois définir ce local, des suggestions sur la façon de le faire comme je suis la moindre idée comment le faire?

EDIT

Donc, ce sont les deux fonctions prop je l'ai, et je dois définir la deuxième place.

-- Check update function 
prop_update (x,y) sud n = prop_XY (x',y') (update sud (x',y') n) == n 
          where x' = x `mod` 9 
           y' = y `mod` 9 

-- helper to find specific value 
prop_XY (x,y) sud = ((!!) (rows (sud)) x) !! y 
+0

Qu'entendez-vous par "localement"? Donc la définition n'échappe pas à la portée d'une fonction? Utilisez 'let' ou' where' comme dans la réponse actuelle. Donc la définition n'échappe pas au module? Utilisez une liste d'exportation explicite en haut du 'module Foo (... les symboles ne comprenant pas prop_XY ...) where'. Autre chose? –

+0

Voici ce que notre instructeur nous a dit, "veuillez définir localement prop_XY à la place puisque vous ne l'utilisez que dans prop_update." pas vraiment sûr de ce qu'il veut dire par là @ ThomasM.DuBuisson –

+0

@TimoCengiz btw, '(!!)' est déconseillé ... non seulement il faudra peut-être parcourir toute la liste, mais voir aussi: https: // wiki .haskell.org/Fonctions partielles – mb21

Répondre

3

Si je vous comprends bien, vous pouvez utiliser une clause where:

prop_update ... = ... prop_XY (x,y) ... 
    where 
    prop_XY (x,y) sud = ((!!) (rows (sud)) x) !! y 

Voir http://learnyouahaskell.com/syntax-in-functions#where pour plus d'informations.

+0

Totalement manqué cela, mais ce qui est myGlobalFunction dans mon cas c'est ce que je ne comprends pas. J'ai eu le commentaire que je devrais faire: "définissez prop_XY localement à la place puisque vous ne l'utilisez que dans prop_update" –

+0

Je suis un débutant à ce sujet alors s'il vous plaît jeter un oeil à l'édition. Je vous remercie –