While reading the Erlang and Neural Networks paper, I noticed that the created dot product function was (in my eye) not a terribly good example of functional programming. A more "functional style" would be something like:
<br><br>dot_prod(L1, L2) -> lists:sum(lists:zipwith(fun(X,Y) -> X*Y end, L1, L2)).<br><br>So we're basically mapping a function across a pair of lists, and then summing it. This looks pretty inefficient though; I don't think you can do any better than the function given in the paper, so I'm just trying to satisfy my curiosity here. The most offensive thing that I see about my function is that it creates a temporary list of products, and then sums that. If L1 and L2 are large, itwill also create a large temporary list that is a total waste. In python, you could write a zipwith function as a generator that yields values as they are requested. Any standard function that takes a list will also take a generator because they both just expose the looping interface (__iter__). Is it possible to create a generator function in erlang that can be used with the list functions?