Example #1
0
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))
Example #2
0
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))
Example #3
0
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))
Example #4
0
def Nth(As, i):
    """ Restituisce l'i-esimo elemento della lista As """
    if IsEmpty(As):
        return As
    if i == 0:
        return Head(As)
    return Nth(Tail(As), i-1)
Example #5
0
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)))
Example #6
0
def Contains(As, value):
    """ Controlla se la lista As contiene un elemento pari a 'value' """
    if IsEmpty(As):
        return False
    if Head(As) == value:
        return True
    return Contains(Tail(As), value)
Example #7
0
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))
Example #8
0
 def LengthI(Ls, n):
     if IsEmpty(Ls):
         return n
     return LengthI(Tail(Ls), n+1)
Example #9
0
def Max(As):
    """ Più grande elemento della lista As """
    return Fold(max, Tail(As), Head(As))
Example #10
0
def Min(As):
    """ Più piccolo elemento della lista As """
    return Fold(min, Tail(As), Head(As))
Example #11
0
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)))
Example #12
0
 def CountI(Ls, counter):
     if IsEmpty(Ls):
         return counter
     if Head(Ls) == value:
         return CountI(Tail(Ls), counter+1)
     return CountI(Tail(Ls), counter)
Example #13
0
 def PrintListI(As):
     if not IsEmpty(As):
         print(Head(As), end='')
         if not IsEmpty(Tail(As)):            
             print(', ', end='')
         PrintListI(Tail(As))
Example #14
0
 def ReverseI(Ls, Rs):
     if IsEmpty(Tail(Ls)):
         return MakeList(Head(Ls), Rs)
     return ReverseI(Tail(Ls), MakeList(Head(Ls), Rs))
Example #15
0
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))
Example #16
0
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)))
Example #17
0
def FoldRight(Op, As, z):
    """ Riduci la lista As, applicando ad ogni suo elemento la funzione F()
        e accumulando i risultati tramite l'operazione Op() """
    if IsEmpty(As):
        return z
    return Op(Head(As), FoldRight(Op, Tail(As), z))
Example #18
0
def FoldLeft(Op, As, z):
    if IsEmpty(As):
        return z
    return FoldLeft(Op, Tail(As), Op(Head(As), z))
Example #19
0
#-----------------------------------------------
if __name__ == "__main__":
    Ls = MakeRange(1, 5)
    print("MakeList(7): ", end='')
    PrintList(Ls)
    
    Rs = MakeRandomInts(10, 1, 100)
    print("MakeRandomInts(10, 1, 100): ", end='')
    PrintList(Rs)
    
    Cs = MakeRange(3,7)
    print("MakeRange(3,7): ", end='')
    PrintList(Cs)

    print("Head(Ls):", Head(Ls))
    print("Tail(Ls):", Tail(Ls))
    
    print("Nth(Ls, 5):", Nth(Ls, 5))
    
    print("Length(Ls):", Length(Ls))

    Bs = MakeRange(1, 3)
    print("Append:", Append(Ls, Bs))
    
    print("Scala:", Scala(Bs, 0.5))
    print("Quadrati:", Quadrati(Bs))
        
    print("Map:", Map(lambda x: x**3, Ls))        
    print("Filter:", Filter(lambda x: x % 2 == 0, Ls))
    
    print("Reverse:", Reverse(Ls))