[Haskell-cafe] AND/OR Perceptron

Tim Wawrzynczak inforichland at gmail.com
Thu Oct 29 15:33:02 EDT 2009


Hector,

That line is declaring a function named 'f' of two arguments: one is 'w',
and the other is a tuple.  The tuple's fst is 'inputs', and its snd is
'expected.'  This function (f) is used in the next line, in the declaration
of the list 'newWeights,' which uses f as the function which does the fold
over the allInputs list.

Cheers,
 - Tim

On Thu, Oct 29, 2009 at 2:27 PM, Hector Guilarte <hectorg87 at gmail.com>wrote:

> Hi cafe,
>
> I'm trying to implement a Perceptron in Haskell and I found one in:
> http://jpmoresmau.blogspot.com/2007/05/perceptron-in-haskell.html (Thanks
> JP Moresmau) but there is one line I don't understand, I was wondering if
> someone could explain it to me. I know the theory behind a perceptron, my
> question is more about the Haskell syntax in that line I don't understand.
>
> epoch :: [([Float],Float)] -> -- ^ Test Cases and Expected Values for each
> test case
>                    [Float] -> -- ^ weights
>               ([Float],Float) -- ^ New weights, delta
> epoch allInputs weights=
>     let
>         f w (inputs,expected) = step inputs w expected -- I don't
> understand this line
>         newWeights = foldl f weights allInputs -- Neither this one
>         delta = (foldl (+) 0 (map abs (zipWith (-) newWeights weights))) /
> (fromIntegral $ length weights)
>     in (newWeights,delta)
>
> What is f and what is w? I really don't get it, Is like it is defining a
> function f which calls step unziping the input, taking one of the elements
> from the fst and it's corresponding snd and invoking step with that, along
> with w (which seems to be a list according to step's signature but I don't
> know where it comes from), and then applying fold to the weights and all the
> Inputs using that f function... But I don't get it!
>
> Maybe if someone could rewrite that redefining f as an separate function
> and calling fold with that function I'll get it.
>
> The input for epoch would be something like this:
> epoch [([0,0],0),([0,1],0),([1,0],0),([1,1],1)] [-0,413,0.135]
>
> and the output for that examples is:
> ([0.0,412.9],3.333537e-2)
>
>
> Thanks a lot,
>
> Hector Guilarte
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091029/a4989461/attachment.html


More information about the Haskell-Cafe mailing list