From 7c5ed14067c6ad56b3a4e3c4e8e2a189a8bc7aac Mon Sep 17 00:00:00 2001 From: "C. P. Byrne" Date: Sun, 13 Oct 2024 14:18:44 -0700 Subject: [PATCH] Update LA01, add quiz07 and practice functions --- SML Practice.pdf | Bin 0 -> 36379 bytes quiz07.sml | 19 +++++ sml_practice.sml | 67 ++++++++++++++++++ .../large_assignment_01.sml | 45 ++++++++++++ 4 files changed, 131 insertions(+) create mode 100644 SML Practice.pdf create mode 100644 quiz07.sml create mode 100644 sml_practice.sml diff --git a/SML Practice.pdf b/SML Practice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1c93ca4fd3dae282f473e094f0cbc09d64028c9 GIT binary patch literal 36379 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 literal 0 HcmV?d00001 diff --git a/quiz07.sml b/quiz07.sml new file mode 100644 index 0000000..aba4e82 --- /dev/null +++ b/quiz07.sml @@ -0,0 +1,19 @@ + + +(* cubeLost *) + +fun cubeList li = map (fn(cur) => cur * cur * cur) li; + +cubeList([1,2,3]); + +(* removeAll *) + +fun removeAll li x = foldr (fn(cur, acc) => if cur = x then acc else cur::acc) [] li; + +val x = removeAll [1,2,3,3,4] 4; + +(* map question *) + +fun r li = map real li + +val res = r [1,2,3] \ No newline at end of file diff --git a/sml_practice.sml b/sml_practice.sml new file mode 100644 index 0000000..8117160 --- /dev/null +++ b/sml_practice.sml @@ -0,0 +1,67 @@ + +(* map = fn : ('a -> 'b) -> 'a list -> 'b list *) +(* foldl = fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b *) +(* foldr = fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b *) + +(* il2rl *) +(* turns an int list into a real list *) +fun il2rl a = map (fn(i) => real(i)) a + +val test_il2rl = il2rl([1,2,3,4]) + +(* squareList *) +(* takes an int list and returns a list of all the squares of +the integer *) +fun squareList a = map (fn(i) => i * i) a + +val test_squareList = squareList([1, 2, 3, 4]) (* [1,4,9,16] *) + +(* sqSum *) +(* takes an int list and returns the sum of the squares of the integers in the list *) +fun sqSum d = foldr (fn (a, b) => (a * a) + b) 0 d; + +val test_sqSum = sqSum([1,2,3,4]) (* 30 *) + +(* dupList *) +(* takes list of any type and returns a new list where all the elements are duplicated *) +fun dupList li = foldr (fn (cur, accumulator) => [cur, cur] @ accumulator) [] li; + +val test_dupList = dupList([1,2,3,4]); + +(* myLength *) +(* takes a list and counts the number of elements in the list +(without using the built-in length function) *) +fun myLength li = foldr (fn (cur, accumulator) => accumulator + 1) 0 li; + +val test_myLength = myLength([1,2,3,4]); + +(* il2absrl *) +(* takes an integer list and returns a list containing the absolute value of each element as a real *) +fun il2absrl li = foldl (fn (cur, accumulator) => accumulator @ [real(if cur > 0 then cur else cur * ~1)]) [] li; + +val test_il2absrl = il2absrl([~1, 2, 3, ~4]) (* [1.0,2.0,3.0,4.0] *) + +(* countTrue *) +(* takes a function and a list and counts the number of elements in the list for which the function returns true (e.g. countTrue (fn x => x mod 2 = 0) *) +fun countTrue func li = foldr (fn(cur, accumulator) => accumulator + (if func(cur) = true then 1 else 0)) 0 li; + +val test_countTrue = countTrue (fn(x) => x mod 2 = 0) [1,2,3,4,5,6]; (* 3 *) + + +(* max *) +(* return the max element in a list of integers *) +fun max li = foldr (fn(cur, accumulator) => if cur > accumulator then cur else accumulator) ~99999999 li; + +val test_max = max [1,2,3,4]; + +(* member *) +(* takes an element and a list and returns true if the element is in the list and false otherwise *) +fun member isInCandidate li = foldr (fn(cur, accumulator) => if isInCandidate = cur then true else if accumulator = true then true else false) false li; + +val test_member = member 4 [1,2,3,4]; (* true *) + +(* pivot *) +(* takes an integer and a list of integers and returns two lists of integers where the first list contains all the elements in the original list that are less than or equal to the integer argument and the second list contains all the elements in the original list that are greater than the integer argument *) +fun pivot cutOffNum li = (foldr (fn(cur1, accumulator1) => if cur1 <= cutOffNum then accumulator1 @ [cur1] else accumulator1) [] li, foldr (fn(cur1, accumulator1) => if cur1 > cutOffNum then accumulator1 @ [cur1] else accumulator1) [] li) + +val test_pivot = pivot 3 [1,2,3,4,5,1,2,3,4,5]; (* ([1,2,3,1,2,3],[4,5,4,5]) *) \ No newline at end of file diff --git a/src/large_assignment_01/large_assignment_01.sml b/src/large_assignment_01/large_assignment_01.sml index 5fffcd2..92af863 100644 --- a/src/large_assignment_01/large_assignment_01.sml +++ b/src/large_assignment_01/large_assignment_01.sml @@ -94,3 +94,48 @@ fun triangleR(a, b, c) = end; + +fun get(cur::li, 0) = cur + | get(cur::li, index) = get(li, index - 1); + + val testGet = get([1,2,3,4,5], 4) + + +fun subList(li, startIndex, endIndex) = if startIndex = endIndex then [get(li, startIndex)] else [get(li, startIndex)] @ subList(li, startIndex + 1, endIndex); + +val testSubList = subList([1,2,3,4,5,6,7,8,9,10], 4, 8); + + +fun reverse li = foldl (fn(cur, acc) => cur::acc) [] li; + +val testReverse = reverse [1,2,3,4,5,6]; + + + +fun apply([], f) = [] + | apply(x::li, f) = [f(x)] @ apply(li, f); + +val testApply = apply([(1,2),(3,4),(5,6)],(op +)); + + + +fun collapse([], startVal, func) = startVal + | collapse(cur::li, startVal, func) = func(cur, collapse(li, startVal, func)); + +val testCollapse = collapse([1,2,3,4,5],0,(op +)); + + + +(* fun quicksort = fun *) + + +fun substring(str, "") = false + | substring(str, isIn) = if String.size(str) = String.size(isIn) then false else if str = String.substring(isIn, 0, String.size(str)) then true else substring(str, + String.substring( + isIn, + 1, + String.size(isIn) + ) + ); + +val testSubstring = substring("hello", "world hello")