<div dir="ltr"><div><div>Time for Higher Order Functions Friday Evening (HOFFE)!<br><br></div>I renamed and refactored the cull functions a bit to give a example of using higher order functions instead of manual recursion.<br>
<br></div><div>To answer your other question about objects, one minimal example below is the spaceship object defined as a two tuple consisting of {Stuff, Vector}. In the example below I just put a atom in the stuff element, but it could as well be a complex term. It is ignored by the filtering function.<br>
<br></div><div>Cheers,<br>Gustav<br></div><div><div><div><br>%% Subtract the second vector from the first<br>subtract({X1, Y1, Z1}, {X2, Y2, Z2}) -> {(X1 - X2), (Y1 - Y2), (Z1 - Z2)}.<br><br>%% Compute the magnitude of the vector<br>
magnitude({X, Y, Z}) -> math:sqrt((X * X) + (Y * Y) + (Z * Z)).<br><br>%% Compute whether the vector with components X, Y and Z has greater magnitude then the passed scalar M. <br>%% Note that this method avoids the expensive sqrt operation. <br>
is_magnitude_greater(M, {X, Y, Z}) -><br>    Msq = M * M,<br>    Magsq = (X * X) + (Y * Y) + (Z * Z), <br>    Msq > Magsq.<br><br>%% Determines if any coordinate in the given vector is bigger than the passed in value M<br>
has_coordinate_greater_than(V, {X, Y, Z}) -> X > V orelse Y > V orelse Z > V;<br>has_coordinate_greater_than(_, _) -> false.<br><br>%% Vector is in the sphere devined by vector C as a center and R as a radius. <br>
in_sphere(C, R, Vector) -><br>    case has_coordinate_greater_than(R, Vector) of<br>        true -> false;<br>        false -> is_magnitude_greater(R, subtract(C, Vector))<br>    end.<br><br>cull(C, R, Vectors) -><br>
    lists:filter(fun(Vector) -> in_sphere(C, R, Vector) end, Vectors).<br>               <br>cull_spaceships(C, R, Spaceships) -><br>    InSphere = fun({_SpaceshipStuff, SpaceshipVector}) -><br>                       in_sphere(C, R, SpaceshipVector) end,<br>
    lists:filter(InSphere, Spaceships).<br><br>=======================================<br><br>34> v:cull_spaceships({3,3,3}, 5, [{spaceship_stuff, {4,4,4}}]).<br>[{spaceship_stuff,{4,4,4}}]<br><br><br></div></div></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Feb 7, 2014 at 10:25 PM, Jesper Louis Andersen <span dir="ltr"><<a href="mailto:jesper.louis.andersen@gmail.com" target="_blank">jesper.louis.andersen@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="im"><br><div class="gmail_quote">On Fri, Feb 7, 2014 at 5:45 PM, kraythe . <span dir="ltr"><<a href="mailto:kraythe@gmail.com" target="_blank">kraythe@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Now the question is the resolution of the followup question of how to integrate this in a solution. Do we return a list of trues and falses and zip that with the objects to form a candidate list? How would you do it? </blockquote>


</div><br></div>Look at lists:partition/2 then write your culler so it can be given as a predicate to partition.</div><span class="HOEnZb"><font color="#888888"><div class="gmail_extra"><br clear="all"><div><br></div>-- <br>
J.
</div></font></span></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>