and-ing, or-ing?

Vladimir Sekissov svg@REDACTED
Sun May 18 21:06:03 CEST 2003

Good day,

existsVertex(N, Graph) and existsVertex(M, Graph)

or better

existsVertex(N, Graph) andalso existsVertex(M, Graph)

andalso - C-like "and", second argument is not calculated if first is


existsVertex(N, Graph) or existsVertex(M, Graph)
existsVertex(N, Graph) orelse existsVertex(M, Graph)

And slightly shorter function for your case would be

existsVertexes(Vertexes, {graph, G}) ->
  ExistsVertexes = [N || {N, _} <- G, lists:memeber(N,Vertexes) == true],
  length(Vertexes) == length(ExistsVertexes).

existsVertexes([N, M], Graph).

Best Regards,
Vladimir Sekissov
chris.danx> How do you "and" two truth states?  In the following "addEdge" function 
chris.danx> It is supposed to add an edge if and only if both vertices exist...  the 
chris.danx> function existsVertex is defined to return true if a vertex exists in a 
chris.danx> given graph.
chris.danx> %% return true if given vertex is in the graph.
chris.danx> %%
chris.danx> existsVertex(N, {graph, []}) ->
chris.danx>      false;
chris.danx> existsVertex(N, {graph, [{N,Y}|Xs]}) ->
chris.danx>      true;
chris.danx> existsVertex(N, {graph, [_|Xs]}) ->
chris.danx>      existsVertex (N, {graph, Xs}).
chris.danx> %% create connection between given vertices
chris.danx> %%
chris.danx> addEdge (N, M, {graph, []}) ->
chris.danx>      nil;
chris.danx> addEdge (N, M, {graph, L}) ->
chris.danx>      bothExist = ???
chris.danx>      if bothExist ->
chris.danx> 	    {graph, []};
chris.danx>         true ->
chris.danx> 	    {error, {graph, L}}
chris.danx>      end.
chris.danx> It's not complete yet, the return values are just temporary until I 
chris.danx> figure out how to check the vertices exist...
chris.danx> Cheers,
chris.danx> Chris
chris.danx> p.s. I might add a function which returns an existing {vertex, [edge]} 
chris.danx> tuple to make it more efficient, but for now I'm keeping it simple.

More information about the erlang-questions mailing list