Skip to content
Snippets Groups Projects
Commit 16e6c52f authored by W. Spencer Smith's avatar W. Spencer Smith
Browse files

Modifications to L16 on Funct Prog continued

parent 65d2a997
No related branches found
No related tags found
No related merge requests found
from CurveADT import *
from Data import *
from Load import *
from Plot import *
X = range(11)
Y = list(map(lambda x: x**2, X))
c1 = CurveT(X, Y, 1)
print(c1.eval(6.5))
PlotCurve(c1, 50)
c2 = CurveT(X, Y, 2)
print(c2.eval(6.5))
PlotCurve(c2, 5)
#PlotCurve(c, 50) will look strange because of edge effects
Load('glass.csv')
c3 = Data.getC(9)
PlotCurve(c3, 50)
print(Data.eval(18, 34))
c4 = Data.slice(18, 1)
PlotCurve(c4, 50)
print(c4.eval(34))
No preview for this file type
......@@ -56,7 +56,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{Administrative Details}
\ifDraft
......@@ -69,12 +69,20 @@ TBD
\item Part 1: February 12, 2018
\item Partner Files: February 18, 2018
\item Part 2: March 2, 2018
\item For floats remember to use pytests
\href{https://docs.pytest.org/en/latest/builtin.html#pytest.approx}{approx}
\item Consider using
\href{https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html}
{interp1d} - the implementation does not have to follow the spec, it just has
to match the specified behaviour
\item A2 demo
\end{itemize}
\item Midterm exam
\begin{itemize}
\item Wednesday, February 28, 7:00 pm
\item 90 minute duration
\item Next week's tutorial will cover a sample midterm
\end{itemize}
\end{itemize}
}
......@@ -84,16 +92,21 @@ TBD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{HW: Remove Everything but Uppercase}
Write a function \texttt{removeNonUpperCase(st)} that takes a string
\texttt{st} and returns the string that results by removing all non upper case
letters\\
~\newline
\structure<1>{How would you build the sequence of \texttt{['A', 'B', ..., 'Z']}?}\newline
\uncover<2->{\texttt{[chr(i) for i in range(ord('A'),ord('Z')+1)]}}
\structure<1>{How would you build the sequence of \texttt{['A','B',...,'Z']}?}\newline
\uncover<2->{\texttt{[chr(i) for i in range(\structure<2>{?, ?})]}}\newline
\uncover<3->{\texttt{[chr(i) for i in range(ord('A'),ord('Z')+1)]}}
~\\
\begin{verbatim}
def removeNonUpperCase(st):
return [c for c in st if (c in upCase)]
\end{verbatim}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -151,15 +164,16 @@ list(map(add3, [1, 5, 3, 1, 6]))
\bi
\item \texttt{lamda} followed by list of arguments: expression
\item \structure{Write code to add \texttt{'!'} to every string in a list of
\item \structure<1>{Write code to add \texttt{'!'} to every string in a list of
strings}
\ei
\uncover<1>{\structure<1>{\texttt{list(map(?, ["BIFF","BANG","POW"]))}}}\\
\uncover<2>{\texttt{list(map(lambda s: s+'!', ["BIFF","BANG","POW"]))}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{Introduce Partial Functions}
\begin{itemize}
......@@ -172,9 +186,12 @@ list(map(add3, [1, 5, 3, 1, 6]))
\item $\mbox{rep}: t \times int \rightarrow [t]$
\ei
\item What if we could partially evaluate rep?
\end{itemize}
\begin{verbatim}
def rep(x, n):
return [x for i in range(n)]
\end{verbatim}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......@@ -224,9 +241,12 @@ map (mapSqr, [[1,2], [3, 4, 5, 6], [7, 8]])
\end{verbatim}
\bi
\item \structure{What is the type of \texttt{mapSqr}?}
\item \structure<1>{What is the type of \texttt{mapSqr}?}\newline
\uncover<2->{$\mbox{map}: (a \rightarrow b) \times [a] \rightarrow [b]$}\newline
\uncover<3->{$\mbox{map}: (a \rightarrow b) \times [[int]] \rightarrow [[int]]$}\newline
\uncover<4->{$\mbox{map}: ([int] \rightarrow [int]) \times [[int]] \rightarrow [[int]]$}\newline
\item \structure{Can you write a function of this type for \texttt{mapSqr}?}
\item \structure<4>{Can you write a function of this type for \texttt{mapSqr}?}
\ei
\end{frame}
......@@ -255,11 +275,19 @@ map (mapSqr, [[1,2], [3, 4, 5, 6], [7, 8]])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{Filter Example}
Write a filter that takes a list of numbers and returns only the even numbers.
%\texttt{filter(even, range(1, 11))}
\structure<1>{Write a filter that takes a list of numbers from 1 to 10 and
returns only the even numbers.}
\begin{verbatim}
def even(x):
return x%2==0
\end{verbatim}
\texttt{filter(func, seq)}\\
\uncover<2>{\texttt{filter(even, range(1, 11))}}
\end{frame}
......@@ -276,6 +304,7 @@ Write a filter that takes a list of numbers and returns only the even numbers.
element
\item Repeats until completely reduced
\item \texttt{accum} is the initial value for the accumulator
\item In Python 3 need \texttt{from functools import reduce}
\item \structure{How would you use reduce to calculate the sum of the numbers
from 1 to 100?}
\item \structure{How about the product?}
......@@ -285,6 +314,18 @@ Write a filter that takes a list of numbers and returns only the even numbers.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Understanding Reduce for Sum}
\bi
\item \texttt{reduce(lambda x, y: x+y, range(1, 5), 0)}
\item \texttt{reduce(lambda x, y: x+y, [1, 2, 3, 4, 5], 0)}
\item \texttt{((((0+1)+2)+3)+4)+5}
\ei
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
\frametitle{Standard Deviation}
Write a function \texttt{stdDev(A)} that takes a list of numbers
......@@ -292,54 +333,77 @@ Write a function \texttt{stdDev(A)} that takes a list of numbers
$$\sigma = \sqrt{\frac{\sum_{i=0}^{|A|-1} (A_i - \mu)^2}{|A|}}$$
\begin{verbatim}
from math import sqrt
from functools import reduce
def stdDev(A):
add = lambda x, y: x+y
N = float(len(A))
mu = reduce(add, A, 0)/N
tot = reduce(add, [(a - mu)**2 for a in A], 0)
return sqrt(tot/N)
print(stdDev([13, 23, 12, 44, 55]))
\end{verbatim}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{And Series}
Write a function \texttt{forall(A)} that takes a list of boolean values
\texttt{A} and returns $\forall ( i:\mathbb{N} | i \in [0 ..|A|-1] : A_i)$
\structure<1>{Write a function \texttt{forall(A)} that takes a list of boolean values
\texttt{A} and returns $\forall ( i:\mathbb{N} | i \in [0 ..|A|-1] : A_i)$}
\begin{verbatim}
def forall(A):
return reduce(?, A, ?)
print(forall([True, True, True, True]))
print(forall([True, True, True, False]))
\end{verbatim}
\uncover<2->{\texttt{reduce(lambda x, y: x and y, A, True)}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\begin{frame}[fragile]
\frametitle{Contains}
Write a function \texttt{contains(x, xs)} that takes a value \texttt{x} and a
list of values \texttt{xs} and returns $\exists ( y | y \in xs : y = x)$
\structure<1>{Write a function \texttt{contains(x, xs)} that takes a value \texttt{x} and a
list of values \texttt{xs} and returns $\exists ( y | y \in xs : y = x)$}
\end{frame}
\begin{verbatim}
def contains(x, xs):
return reduce(func?, seq?, False)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
adjectives = ["lazy", "grouchy", "scheming"]
\begin{frame}
\frametitle{Index Set}
print(contains(4, [3, 4, 5, 6, 8]))
print(contains("happy", adjectives))
Write a function \texttt{indexSet(x, B)} that takes a value \texttt{x} and a
list of values \texttt{B} and returns a list of indices where \texttt{B[i] =
x}.\\
~\newline
As a first step, how would you say this mathematically?
\end{verbatim}
\uncover<2->{\texttt{reduce(lambda a, b: a or b, [y==x for y in xs], False)}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Index Set}
\frametitle{Homework: Index Set}
Write a function \texttt{indexSet(x, B)} that takes a value \texttt{x} and a
list of values \texttt{B} and returns a list of indices where \texttt{B[i] =
x}.\\
~\newline
\structure<1>{As a first step, how would you say this mathematically?}\\
$$\mbox{indexSet}(x, B) \equiv \{i : \mathbb{N} | i \in [0 .. |B|-1] \wedge B_i =
x : i\}$$
\uncover<2->{$$\mbox{indexSet}(x, B) \equiv \{i : \mathbb{N} | i \in [0 .. |B|-1] \wedge B_i =
x : i\}$$}\\
How could you use \texttt{indexSet} to calculate \texttt{rank(x, A)}?
\uncover<3->{How could you use \texttt{indexSet} to calculate \texttt{rank(x, A)}?}\\
\end{frame}
......
\frametitle{Another Example with Map}
\frametitle{Contains}
Write a map that takes a 2D list of numbers and returns a 2D list where all
elements are squared.
\structure<1>{Write a function \texttt{contains(x, xs)} that takes a value \texttt{x} and a
list of values \texttt{xs} and returns $\exists ( y | y \in xs : y = x)$}
\begin{verbatim}
map (mapSqr, [[1,2], [3, 4, 5, 6], [7, 8]])
\end{verbatim}
def contains(x, xs):
return reduce(func?, seq?, False)
adjectives = ["lazy", "grouchy", "scheming"]
\bi
\item \structure{What is the type of \texttt{mapSqr}?}
print(contains(4, [3, 4, 5, 6, 8]))
print(contains("happy", adjectives))
\end{verbatim}
\item \structure{Can you write a function of this type for \texttt{mapSqr}?}
\ei
\uncover<2->{\texttt{reduce(lambda a, b: a or b, [y==x for y in xs], False)}}
......@@ -25,8 +25,6 @@ L7 = list(map(lambda s: s+'!', ["BIFF", "BANG", "POW"]))
# Partial Functions
from functools import partial
def power(base, exponent):
return base ** exponent
......@@ -60,10 +58,16 @@ def grt3(x):
L8 = filter(grt3, [1,5,3,2,1,6,4,3,2,1])
L9 = filter(lambda x: x==3, [1,5,3,2,1,6,4,3,2,1])
def even(x):
return x%2==0
L10 = filter(even, range(1, 11))
# Reduce
from functools import reduce
reduce(lambda x, y: x+y, range(1, 101), 0)
reduce(lambda x, y: x*y, range(1, 101), 1)
......@@ -77,23 +81,25 @@ def stdDev(A):
tot = reduce(add, [(a - mu)**2 for a in A], 0)
return sqrt(tot/N)
print stdDev([13, 23, 12, 44, 55])
print(stdDev([13, 23, 12, 44, 55]))
# And Series
def forall(A):
return reduce(lambda x, y: x and y, A, True)
print forall([True, True, True, True])
print forall([True, True, True, False])
print(forall([True, True, True, True]))
print(forall([True, True, True, False]))
# Contains
def contains(x, xs):
return reduce(lambda a, b: a or b, [y==x for y in xs], False)
print contains(4, [3, 4, 5, 6, 8])
print contains("happy", adjectives)
adjectives = ["lazy", "grouchy", "scheming"]
print(contains(4, [3, 4, 5, 6, 8]))
print(contains("happy", adjectives))
def indexSet(x, B):
return [i for i in range(len(B)) if B[i]==x]
......
......@@ -60,9 +60,11 @@ L10 = filter(func?, seq?)
# Reduce
reduce(?)
from functools import reduce
reduce(?)
reduce(func, seq, accum)
reduce(func, seq, accum)
# Standard Deviation
......@@ -70,19 +72,19 @@ from math import sqrt
def stdDev(A):
add = lambda x, y: x+y
N = float(len(A))
mu = reduce(?
tot = reduce(?
mu = reduce(func, seq, accum)
tot = reduce(func, seq, accum)
return sqrt(tot/N)
print stdDev([13, 23, 12, 44, 55])
print(stdDev([13, 23, 12, 44, 55]))
# And Series
def forall(A):
return reduce(?)
return reduce(func, seq, accum)
print forall([True, True, True, True])
print forall([True, True, True, False])
print(forall([True, True, True, True]))
print(forall([True, True, True, False]))
# Contains
......@@ -91,8 +93,8 @@ def contains(x, xs):
adjectives = ["lazy", "grouchy", "scheming"]
print contains(4, [3, 4, 5, 6, 8])
print contains("happy", adjectives)
print(contains(4, [3, 4, 5, 6, 8]))
print(contains("happy", adjectives))
def indexSet(x, B):
return [?]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment