Hi there,

I am writing a toy compiler in Haskell to further my skills in functional programming. One of the functions I wrote is to determine the iteration count of a loop. I have a number of different test that I want to do and I find myself now testing some of these using pattern matching and some properties using an if-then-else construction. I do not consider this very pretty.

My question is: are there guidelines of when to use pattern matching and when to use if-then-else?

Snippet of the function I mentioned:

---8<-----------------------------------------------------------------------------------
itercount (ForLoop
                [ ( Assignment update_lcv
                        (Op2 "+" (Content update_lcv') update_expr)
                  )
                ]
                [(Assignment init_lcv init_expr)]
                (TestStmt (Op2 "<" (Content test_lcv) test_expr))
                bodyblock)
        = if    -- All stmts use the same lcv
                   test_lcv == init_lcv
&& test_lcv == update_lcv
&& test_lcv == update_lcv'
                -- And the lcv is not updated in the body
&& intersect [test_lcv] (blockkills bodyblock) == []
then Just $ simple_itercount init_expr test_expr update_expr
                else Nothing
itercount _ = Nothing
---8<-----------------------------------------------------------------------------------

Thanks,
  Maarten

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to