Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. (*Problem 1*)
  2. fun recursiveFromTo(low:int, high:int, func:int->'a, output:'a list) =
  3. let val value = func(low) in
  4. if low > high then output else
  5. recursiveFromTo(low+1, high, func, output @ [value])
  6. end;
  7.  
  8. fun fromTo(low:int, high:int) (func:int -> 'a) =
  9. if high < low then [] else
  10. recursiveFromTo(low, high, func, []);
  11.  
  12. (*Problem 2*)
  13. (*Part i*)
  14. fun recursiveHalve(inList: 'a list, oddList: 'a list, evenList: 'a list) =
  15. let val item = List.take(inList, 1) in
  16. if List.length(inList) = 1 then
  17. if List.length(oddList @ item) = List.length(evenList) then
  18. (evenList, oddList @ item)
  19. else
  20. (oddList @ item, evenList)
  21. else
  22. recursiveHalve(List.drop(inList, 1), evenList, oddList @ item)
  23. end;
  24.  
  25. fun halve(inList: 'a list) =
  26. if List.length(inList) = 0
  27. then ([], [])
  28. else recursiveHalve(inList, [], []);
  29.  
  30. (*Part ii*)
  31. fun recursiveMerge(output: 'a list, list1: 'a list, list2: 'a list) =
  32. if List.length(list1) = 0
  33. then output @ list2
  34. else if List.length(list2) = 0
  35. then output @ list1
  36. else recursiveMerge(output @ List.take(list1, 1), list2, List.drop(list1, 1));
  37.  
  38. fun merge(list1: 'a list, list2: 'a list) =
  39. recursiveMerge([], list1, list2);
  40.  
  41. (*Problem 3*)
  42. (*Part i*)
  43. fun recursiveSplitAtLast(item: ''a, inList: ''a list, frontList: ''a list, backList: ''a list) =
  44. if List.length(inList) = 0
  45. then ([], [])
  46. else let val out = recursiveSplitAtLast(item, List.tl(inList), frontList, backList) in
  47. if #1 out = nil andalso item <> List.hd(inList)
  48. then ((#1 out), [List.hd(inList)] @ #2 out)
  49. else (([List.hd(inList)] @ #1 out), (#2 out))
  50. end;
  51.  
  52. fun splitAtLast(item: ''a)(inList: ''a list) =
  53. recursiveSplitAtLast(item, inList, [], []);
  54.  
  55. (*Part ii*)
  56.  
  57. fun recursiveSplitAtFirst (item: ''a, inList: ''a list, frontList: ''a list, backList: ''a list) =
  58. if List.length(inList) = 0
  59. then (frontList, backList)
  60. else if backList = nil andalso item <> List.hd(inList)
  61. then recursiveSplitAtFirst(item, List.tl(inList), frontList @ [List.hd(inList)], backList)
  62. else recursiveSplitAtFirst(item, List.tl(inList), frontList, backList @ [List.hd(inList)]);
  63.  
  64. fun splitAtFirst (item: ''a)(inList: ''a list) =
  65. recursiveSplitAtFirst(item, inList, [], []);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement