Advertisement
Guest User

Untitled

a guest
Nov 16th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. datatype expression =  Constant of int |
  2.         Variable of string |
  3.         Operator of string * expression |
  4.         Pair of expression list |
  5.         List of expression list
  6.  
  7. datatype pattern = ConstantP of int
  8.     | VariableP of string
  9.     | OperatorP of string * pattern
  10.     | PairP of pattern list
  11.     | ListP of pattern list
  12.     | UnorderedListP of pattern list
  13.     | Wildcard
  14.  
  15.  
  16. fun pretvori(pair: pattern) =
  17.     case pair of
  18.         VariableP a => Variable a
  19.         | ConstantP a => Constant a
  20.         | PairP [a,b] => Pair [pretvori(a), pretvori(b)]
  21.         | OperatorP(a, b) => Operator(a, (pretvori(b)))
  22.         | ListP a => case a of
  23.             h::nil => List [pretvori(h)]
  24.             |h::t => List ([pretvori(h)] @ [] @ [pretvori(ListP t)])
  25.  
  26. pretvori(ListP([ConstantP 1, ConstantP 2, ListP([ConstantP 3, ConstantP 7, ListP([ConstantP 77, ConstantP 33])])]));
  27.  
  28. (*OUTPUT*)
  29. val it =
  30.   List
  31.     [Constant 1,
  32.      List
  33.        [Constant 2,
  34.         List
  35.           [List
  36.              [Constant 3,
  37.               List [Constant 7,List [List [Constant 77,List [Constant 33]]]]]]]]
  38.   : expression
  39.  
  40. (*WHAT THE OUTPUT SHOULD BE *)
  41. pretvori(List([Constant 1, ConstantP , List([Constant 3, Constant 7, List([Constant 77, Constant 33])])]));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement