[Haskell-cafe] Arithmetic expressions with random operators

Mahmoud Murad mahmoudmurad92 at gmail.com
Thu Jun 8 14:34:52 UTC 2017


Thanks Francesco, I will try it

8 Haz 2017 16:55 tarihinde "Francesco Ariis" <fa-ml at ariis.it> yazdı:

On Thu, Jun 08, 2017 at 04:03:55PM +0300, Mahmoud Murad wrote:
> I have the following problem, I want to randomly generate arithmetic
> expressions based on a number, for example:
> if I have n = 3, then the expression must have 3 operators like this
> (4)*(((3+5)-2)).

Hello Mahmoud,
    probably not the most flexible and posh solution, but datatypes
would do.

    data Exp = EInt Integer
             | Sum  Exp Exp
             | Diff Exp Exp
             | Mult Exp Exp

and then of course you want to write

    evaluate :: Exp -> Integer

and

    write :: Exp -> String
    -- maybe instance Show Exp where

Once you do that, picking Exp constructors at random should not be
difficult.

There are other ways to write a DSL like this (using GADTs, tagless
final style, etc.), each of those expands on/solves a specific problem
(extensibility, etc.); but there is no benefit in complicating your code
if you don't need it.

Does that help?
-F
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170608/8a0e35fb/attachment.html>


More information about the Haskell-Cafe mailing list