def RemoveAll(As, value): """ Rimuovi tutti gli elementi di 'value' trovato in As """ if IsEmpty(As): return As if Head(As) == value: return RemoveAll(Tail(As), value) return MakeList(Head(As), RemoveAll(Tail(As), value))
def RemoveFirst(As, value): """ Rimuovi il primo elemento di 'value' trovato in As """ if IsEmpty(As): return As if Head(As) == value: return Tail(As) return MakeList(Head(As), RemoveFirst(Tail(As), value))
def Reverse(As): """ Restituisci una nuova lista gli elemento di As in ordine inverso """ def ReverseI(Ls, Rs): if IsEmpty(Tail(Ls)): return MakeList(Head(Ls), Rs) return ReverseI(Tail(Ls), MakeList(Head(Ls), Rs)) return ReverseI(Tail(As), MakeList(Head(As)))
def Filter(P, As): """ Restituisci una nuova lista che contiene solo gli elementi di As che soddisfano il predicato P() """ if IsEmpty(As): return As if P(Head(As)): return MakeList(Head(As), Filter(P, Tail(As))) return Filter(P, Tail(As))
def Scala(As, a): """ Restituisci una nuova lista che per ogni elemento di As contiene lo stesso valore moltiplicato per 'a' """ if IsEmpty(As): return As return MakeList(a * Head(As), Scala(Tail(As), a))
def Append(As, Bs): """ Aggiungi la lista Bs in coda alla lista As """ if IsEmpty(As): return Bs return MakeList(Head(As), Append(Tail(As), Bs))
def MakeI(n): if n > b: return EmptyList() return MakeList(n, MakeI(n + 1))
def SplitList(Ls, end, start=0): """ Ritorna gli elementi da start a end-1""" if start >= end: return EmptyList() return MakeList(Nth(Ls, start), SplitList(Ls, end, start + 1))
def Concatenate(x, Ls): return Append(Ls, MakeList(x))
def FoldFilter(P, Ls): """ Filter in termini di Fold """ return Fold(lambda x, y: MakeList(x, y) if P(x) else y, Ls, EmptyList())
def FoldMap(F, Ls): """ Map in termini di Fold """ return Fold(lambda x, y: MakeList(F(x), y), Ls, EmptyList())
def MakeRandomInts(n, a, b): """ Restituisce una lista n di numeri causali, uniformente distribuiti nell'intervallo [a,b] (estremi compresi) """ if n == 0: return EmptyList() return MakeList(randint(a, b), MakeRandomInts(n - 1, a, b))
def ReverseI(Ls, Rs): if IsEmpty(Tail(Ls)): return MakeList(Head(Ls), Rs) return ReverseI(Tail(Ls), MakeList(Head(Ls), Rs))
def Map(F, As): """ Restituisci una nuova lista che per ogni elemento di As contiene il valore ottenuto applicato F() ad all'elemento """ if IsEmpty(As): return As return MakeList(F(Head(As)), Map(F, Tail(As)))
def Quadrati(As): """ Restituisci una nuova lista che per ogni elemento di As contiene lo stesso valore al quadrato """ if IsEmpty(As): return As return MakeList(Head(As) * Head(As), Quadrati(Tail(As)))