[Haskell-cafe] AND/OR Perceptron

Hector Guilarte hectorg87 at gmail.com
Thu Oct 29 15:27:54 EDT 2009


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091029/2c077e91/attachment.html


More information about the Haskell-Cafe mailing list