# CSE 130 - Programming Assignment #6 FAQ

1. ### 1a) What happens when I call "Vector("HELLO")?"

2. A vector is just a sequence. So you should get the same thing as calling "Vector(['H', 'E', 'L', 'L', 'O'])".

3. ### 1c) What is the difference between + and += ?

4. "v1+v2" builds a new vector equal to the sum of v1 and v2 and returns it. The original vectors v1 and v2 are unchanged. "v1+=v2" changes the vector v1 to qual the usm of v1 and v2. v2 remains unchanged.

5. ### 1c) Does + change the two original vectors?

6. See previous.

7. ### 1c) I'm having trouble adding a tuple and a vector (but the reverse order works!)?

8. If you're having trouble with something like this (6,8,2)+Vector([4,-3,2]) you probably didn't implement the __radd__ function.

9. ### 1c) What happens when we pass vectors of differen length to +/+=?

10. Throw a value error.

12. Yes.

14. No.

15. ### 1g) What happens when we compare vectors of different length?

16. You can assume that only vectors of equal length will be compared.

17. ### 1g) I'm confused by the comparison between vectors?

18. Here's a handy example thanks to Valentin Robert:

```v = Vector([1, 2, 3])
w = Vector([3, 2, 1])

v > w    is False
w > v    is False
v == w    is False
v >= w   is True
w <= v   is True
```

19. ### 1f) What type do we return when we get a slice from a Vector?

20. ```>>> Vector([1,2,3,4,5])[3:5]
Vector([4, 5])
```

21. ### 1f) Getting an exception when trying to call __lt__/__gt__ ... on an object()(e.g. super(Vector, self).__lt__(other))

22. Instead of super(Vector, self).__lt__(other) try super(Vector, self) < other

23. ### 1f) How do I treat vectors as object's when comparing them?

24. See previous.

25. ### 2a)/2)b Getting "TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'" for fib for any of the decorators.

26. Did you forget to return a value from the decorated function?

27. ### 2b) Getting 'TypeError: unhashable type: ...' in memoizing decorator (

28. You cannot use lists,dictionaries or any other mutable data type as a key for a python dictionary. You are going to have to figure out a different way to rememer arguments containing dictionaries/lists and the keyword arguments.

29. ### 2a) What do I do about exceptions in traced?

30. You should think carefully what happens to control flow when an exception is thrown? Based on that, think how you need to adjust indentation.

31. ### 2b) How do I handle exceptions in memoized?

32. Exceptions are a value like any other, than can be stored, and then thrown again (read the docs on try/catch/raise).

34. Yes.

35. ### Are these two calls the same? ```@memoized def foo(a,b,c): ... foo(5,3,2) foo(5,c=2,b=3) ```

36. In the first case the decorated function would see 5,3,2 as positional arguments, and in the second it would see 5 as a positional argument, and c=2 and b=3 as keyword arguments. So unfortunately, these would be different calls. (i.e. you can't memoize the second, using the result of the first).

37. ### Can I save the output of "run_examples" to a file? (so that I can diff them)

38. Yes. Create a new python script (lets call it foo.py) with the following contents:

```from decorators import *
run_examples()
```
Then from the command line run "python foo.py > output.txt" and Voila!