Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 0.79 KB | None | 0 0
  1.  
  2. (* removes Ingredients from r1 recipe option list and returns recipe list *)
  3. fun removeHelper names r1 =
  4.     let
  5.         val removed = List.map (fn e => remove names e) r1
  6.         val onlySome = List.filter (fn e => isSome(e)) removed
  7.     in
  8.         List.map (fn e => valOf(e)) onlySome
  9.     end
  10. and remove names r =
  11.     case r of
  12.         Ingredient(s) => if List.foldl (fn(name, a) => name=s orelse a) false names then NONE else SOME(Ingredient(s))
  13.         | AnyOf(r1) => let
  14.                             val removed = removeHelper names r1
  15.                         in
  16.                             if List.length removed > 1 then SOME(AnyOf(removed))
  17.                             else if List.length removed = 1 then SOME(List.nth(removed, 0))
  18.                             else NONE
  19.                         end
  20.         | Action(s, r1) => let val removed = removeHelper names r1 in if List.length removed > 1 then SOME(Action(s, removed)) else NONE end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement