Jak wykonać zadanie z normalizacją wektorów, ale używając funkcji dekorowanej klasą?

0

mam zadanie: Wykonaj ćwiczenie z normalizacją wektora, ale używając klasy Haskell. Tworząc funkcję liczącą długość wektora użyj funkcji power poprzedniego tygodnia dekorując ją dekoratorem Haskell. Użyj tej udekorowanej funkcji zarówno do liczenia listy kwadratów jak i do pierwiastkowania sumy. Funkcja powinna zawierać tylko jedną linię, w której zajdzie: pierwiastkowanie ( sumy ( listy kwadratów ( ) ) ) Stwórz funkcję normalizującą wektor z wykorzystaniem funkcji map, dla której przekazywana funkcja to częściowa aplikacja operatora mnożenia wartością: 1 / długość wektora. Tym razem do częściowej aplikacji wykorzystaj udekorowanie funkcji mul. Stwórz drugą wersję funkcji liczącej długość wektora, w której wykorzystaj składanie funkcji. W tym celu musisz wcześniej udekorować Haskellem funkcję sum.

to mój kod:

import operator
from operator import mul

class Haskell:        
    def __init__(self, func, num_args=None):
        self.func = func
        self.num_args = func.__code__.co_argcount if num_args==None else num_args

    def __pow__(self, other):
        return (lambda *args, **kw: self.func(other(*args, **kw)))

    def __call__(self, *a):
        if len(a) == self.num_args:
            return self.func(*a)
        def q(*b):
            return self.func(*(a + b))
        return Haskell(q, self.num_args - len(a))
        

sum_ = Haskell(sum, 2)
mul = Haskell(mul, 2)

@Haskell
def power(n, x):
    return x**n
    
def dlugosc(vector):
    return (power(1/2, sum(map(power(2), vector))))

def dlugosc2(vector):
      return power(1/2)(sum_(map(power(2), vector)))#return power(1/2)**(sum(map(power(2)))(vector)
    
def normalize(vector):
    length = dlugosc(vector)
    return list(map(mul(1/length),vector))
    
print(dlugosc2([1,2,2]))

a wynik:

<function Haskell.__pow__.<locals>.<lambda> at 0x7f26eacead90>

czemu nie wyświetla normalnie liczby?

0

Wyglada że udekorowane funkcje (Haskell - em) zwracaja obiekt/funkcję? Jakby brakuje gdzieś wywołania; co powiedział debugger?

1 użytkowników online, w tym zalogowanych: 0, gości: 1