Editing PEGWiki:Notational conventions
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | This page documents some conventions to be followed when writing | + | This page documents some conventions to be followed when writing pseudocode on PEGWiki. These are not binding policy on PEGWiki, but following them should minimize confusion and promote consistency across articles. You won't get in trouble for not following them, but what you write is likely to be slightly modified to conform with these conventions if it doesn't initially. If you see arcane or unfamiliar notation anywhere in an article, but especially in a pseudocode block, you may find its meaning here. Changes to these conventions should be discussed on the [[PEGWiki_talk:Pseudocode conventions|talk page]]. |
− | = | + | =Universal conventions= |
− | + | ||
* '''Structure should be indicated by indentation''', as in Python. Adding braces <code>{}</code> as in C or words such as <code>begin</code> and <code>end</code> as in Pascal would introduce unnecessary clutter into pseudocode blocks. '''Do not use tabs''' for indentation. Five spaces is a good guideline. (In LaTeX pseudocode, this means five full-width spaces (a full-width space is "<code>\ </code>").) | * '''Structure should be indicated by indentation''', as in Python. Adding braces <code>{}</code> as in C or words such as <code>begin</code> and <code>end</code> as in Pascal would introduce unnecessary clutter into pseudocode blocks. '''Do not use tabs''' for indentation. Five spaces is a good guideline. (In LaTeX pseudocode, this means five full-width spaces (a full-width space is "<code>\ </code>").) | ||
− | * The <code>for</code>, <code>if</code>/<code>else</code>, and <code>while</code> statements should not be followed by words like "do" or "then" | + | * The <code>for</code>, <code>if</code>/<code>else</code>, and <code>while</code> statements should not be followed by words like "do" or "then"; pseudocode is intended for humans, not machines. |
* Similarly, statements should not end in semicolons. | * Similarly, statements should not end in semicolons. | ||
* Indices into arrays should be placed in square brackets, <code>[]</code>. The Pascal convention of separating indices by commas is preferred to the C convention of having a separate set of brackets for each index (simply by virtue of being nicer and more intuitive), but the latter may be occasionally appropriate to reinforce the interpretation of the array's structure. Use your common sense. | * Indices into arrays should be placed in square brackets, <code>[]</code>. The Pascal convention of separating indices by commas is preferred to the C convention of having a separate set of brackets for each index (simply by virtue of being nicer and more intuitive), but the latter may be occasionally appropriate to reinforce the interpretation of the array's structure. Use your common sense. | ||
* Parameter lists should be enclosed in parentheses, <code>()</code>, and parameters should be separated by commas. | * Parameter lists should be enclosed in parentheses, <code>()</code>, and parameters should be separated by commas. | ||
− | * A function header should contain with the word <code>function</code>, the function's name, and the function's parameter list, in that order | + | * A function header should contain with the word <code>function</code>, the function's name, and the function's parameter list, in that order. The body of a function should be indented. |
* If something is not a real command, ''e.g.'' <code>input</code> or <code>print</code>, it should not be written like a function (its parameter list should not have parentheses). | * If something is not a real command, ''e.g.'' <code>input</code> or <code>print</code>, it should not be written like a function (its parameter list should not have parentheses). | ||
* Object-oriented code should be used wherever appropriate, and '''nowhere else'''. The members of an object should be indicated by the dot operator <code>.</code>. For example, it makes sense to represent a data structure as an object (which encapsulates the structure's data). However, please do not wrap an entire algorithm in an object as would be done in Java; that is pointless and only leads to clutter. | * Object-oriented code should be used wherever appropriate, and '''nowhere else'''. The members of an object should be indicated by the dot operator <code>.</code>. For example, it makes sense to represent a data structure as an object (which encapsulates the structure's data). However, please do not wrap an entire algorithm in an object as would be done in Java; that is pointless and only leads to clutter. | ||
− | * The mod operator should never return a negative result; the number-theoretic convention of always yielding a non-negative integer should be followed | + | * The mod operator should never return a negative result; the number-theoretic convention of always yielding a non-negative integer should be followed. |
− | + | =Text-mode conventions= | |
* Variable assignment should occur through the use of a single equals sign, <code>=</code>, although the Pascal notation of <code>:=</code> is also acceptable. | * Variable assignment should occur through the use of a single equals sign, <code>=</code>, although the Pascal notation of <code>:=</code> is also acceptable. | ||
* Equality testing should also occur through the use of a single equals sign, <code>=</code>, but is distinguished from variable assignment by context. For example, if it is preceded by <code>if</code>, it is an equality test, and if it stands alone, it is an assignment. The C notation of <code>==</code> should be avoided. | * Equality testing should also occur through the use of a single equals sign, <code>=</code>, but is distinguished from variable assignment by context. For example, if it is preceded by <code>if</code>, it is an equality test, and if it stands alone, it is an assignment. The C notation of <code>==</code> should be avoided. | ||
− | * The symbols <code><=</code> | + | * The symbols <code><=</code>/<code>>=</code>/<code><></code> and <code>≤/≥/≠</code> are equally acceptable, but in most other cases a Unicode symbol should be used whenever both necessary and possible. For example, <code>oo</code> for <code>∞</code> is unacceptable. |
* Variables (and named constants) from pseudocode blocks which are referenced in the article text should be in <i>italics</i>; all other items, such as functions and literal constants, should be <code>monospaced</code>. The exception is literal numerical constants; it is acceptable not to format them specially, since they cause no confusion. | * Variables (and named constants) from pseudocode blocks which are referenced in the article text should be in <i>italics</i>; all other items, such as functions and literal constants, should be <code>monospaced</code>. The exception is literal numerical constants; it is acceptable not to format them specially, since they cause no confusion. | ||
− | + | =Math-mode conventions= | |
* The LaTeX <code>\sqrt</code> command is almost always preferable to typing out <math>\operatorname{sqrt}</math>. | * The LaTeX <code>\sqrt</code> command is almost always preferable to typing out <math>\operatorname{sqrt}</math>. | ||
* The vinculum (horizontal bar) to indicate division (produced by the <code>\frac</code> command) is usually best, but if the numerator or denominator is complex, a single slash <math>/</math> is preferable when it improves readability or overall aesthetic appeal. | * The vinculum (horizontal bar) to indicate division (produced by the <code>\frac</code> command) is usually best, but if the numerator or denominator is complex, a single slash <math>/</math> is preferable when it improves readability or overall aesthetic appeal. | ||
Line 27: | Line 26: | ||
* Variable assignment should occur through the <math>\gets</math> symbol (LaTeX code: <code>\gets</code>) | * Variable assignment should occur through the <math>\gets</math> symbol (LaTeX code: <code>\gets</code>) | ||
− | + | =Technical notation= | |
− | + | ==Sets and related items== | |
− | * | + | * The symbol ∈ means "is a member of". For example, <math>\pi</math> is a member of the set of real numbers, hence we might write <math>\pi \in \mathbb{R}</math>. Similarly, ∉ means "is not a member of"; <math>\pi \notin \mathbb{Q}</math>. The union of two sets <math>S</math> and <math>T</math> is denoted <math>S\cup T</math>, their intersection <math>S\cap T</math>, and their difference <math>S\setminus T</math>. |
− | + | * Items enclosed in braces {} and separated by commas form a set or multiset. For example, <math>\{1,2,3\}</math> is a set containing the elements 1, 2, and 3. Normally they form a set; they form a multiset if stated otherwise. The difference is that a set contains no duplicate elements. Sets and multisets should be ''typed'': that is, a set or multiset should not contain elements of different types. However, a set/multiset may itself contain sets/multisets, or any other kind of item. | |
− | + | * Items enclosed in parentheses () and separated by commas form a ''tuple''. For example, <math>(A,B)</math> is an ordered pair (a tuple with two elements). Tuples may contain elements of different types. | |
− | * Items enclosed in parentheses | + | ==Graph theory== |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
* Vertices in graphs should be given either non-negative integers or letters as labels; letters however must be italicized except when in code blocks. Subscripts on letters are okay: we might for example label the vertices of a bipartite graph as <math>A_1,A_2,A_3,A_4,\ldots,B_1,B_2,B_3,B_4,\ldots</math>, in which edges exist only between <math>A</math>s and <math>B</math>s. Subscripts on numbers, however, are not. | * Vertices in graphs should be given either non-negative integers or letters as labels; letters however must be italicized except when in code blocks. Subscripts on letters are okay: we might for example label the vertices of a bipartite graph as <math>A_1,A_2,A_3,A_4,\ldots,B_1,B_2,B_3,B_4,\ldots</math>, in which edges exist only between <math>A</math>s and <math>B</math>s. Subscripts on numbers, however, are not. | ||
* An edge in a directed graph is an ordered pair of vertices. For example, if a graph has an edge from <math>A</math> to <math>B</math>, then this can be described as <math>(A,B)</math>. An edge in an undirected graph is an unordered pair, or a set containing two vertices: for example, <math>\{A,B\}</math>. (If self-loops are allowed, then it's actually a multiset.) | * An edge in a directed graph is an ordered pair of vertices. For example, if a graph has an edge from <math>A</math> to <math>B</math>, then this can be described as <math>(A,B)</math>. An edge in an undirected graph is an unordered pair, or a set containing two vertices: for example, <math>\{A,B\}</math>. (If self-loops are allowed, then it's actually a multiset.) | ||
* A graph is an ordered pair of two sets: <math>V</math> and <math>E</math>. The former is the set of vertices, and the latter the set of edges. We can write <math>G = (V,E)</math> to indicate that the graph <math>G</math> has vertex set <math>V</math> and edge set <math>E</math>. Also, given some graph <math>G</math>, <math>V(G)</math> is the vertex set of <math>G</math>, and <math>E(G)</math> is the edge set of <math>G</math>. An example of a graph is then <math>(\{A,B,C\},\{(A,B),(B,C),(A,C)\})</math>, for which <math>V=\{A,B,C\}</math> and <math>E=\{(A,B),(B,C),(A,C)\}</math>. This graph has vertices <math>A</math>, <math>B</math>, and <math>C</math>, an edge from <math>A</math> to <math>B</math>, an edge from <math>B</math> to <math>C</math>, and an edge from <math>A</math> to <math>C</math>. Note: we can write <math>(A,B) \in E(G)</math> to indicate that there exists an edge from <math>A</math> to <math>B</math>. However, the notation <math>(A,B) \in G</math> is incorrect. | * A graph is an ordered pair of two sets: <math>V</math> and <math>E</math>. The former is the set of vertices, and the latter the set of edges. We can write <math>G = (V,E)</math> to indicate that the graph <math>G</math> has vertex set <math>V</math> and edge set <math>E</math>. Also, given some graph <math>G</math>, <math>V(G)</math> is the vertex set of <math>G</math>, and <math>E(G)</math> is the edge set of <math>G</math>. An example of a graph is then <math>(\{A,B,C\},\{(A,B),(B,C),(A,C)\})</math>, for which <math>V=\{A,B,C\}</math> and <math>E=\{(A,B),(B,C),(A,C)\}</math>. This graph has vertices <math>A</math>, <math>B</math>, and <math>C</math>, an edge from <math>A</math> to <math>B</math>, an edge from <math>B</math> to <math>C</math>, and an edge from <math>A</math> to <math>C</math>. Note: we can write <math>(A,B) \in E(G)</math> to indicate that there exists an edge from <math>A</math> to <math>B</math>. However, the notation <math>(A,B) \in G</math> is incorrect. | ||
* The number of vertices in graph <math>G</math> is denoted <math>|V(G)|</math> (the size of the vertex set), and the number of edges <math>|E(G)|</math> (the size of the edge set). When discussing asymptotic performance, however, we generally write just <math>V</math> and <math>E</math>. | * The number of vertices in graph <math>G</math> is denoted <math>|V(G)|</math> (the size of the vertex set), and the number of edges <math>|E(G)|</math> (the size of the edge set). When discussing asymptotic performance, however, we generally write just <math>V</math> and <math>E</math>. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |