I think that algorithms described in a paper should have accompanying source code.

I was giving a presentation that basically summarized "Laplacian Eigenmaps for Dimensionality Reduction and Data Representation Methods" by Belkin and Niyogi.

I had this bullet point:

- Nodes i and j are connected by an edge if i is among n nearest

neighbors of j or j is among n nearest neighbors of i

I made comment about how this was not a symmetric property. A person asked a question about why it was not symmetric.

My answer was basically, its symmetric but depending on how you parse the sentence it can be un-symmetric. One way the OR is part of the algorithm, the other way, the OR is an or in the implementation of the algorithm.

One way is to say:

(defun edgep (i j)

(or (n-nearest-neighbors i j *n*)

(n-nearest-neighbors j i *n*)))

Another way:

define edgep like this,

(defun edgep (i j)

(n-nearest-neighbors i j *n*))

or define edgep like this,

(defun edgep (i j)

(n-nearest-neighbors j i *n*))

So, yeah, if you are describing an algorithm, and there is more than one way to do a step, be clear whether you mean that you can do it two ways, or that they have to OR the results of two sub-steps. I mean, it wasn't that ambiguous. But it shouldn't be able to have multiple interpretations, even if one seems like a stretch, cuz some unsuspecting grad student will find it.