伪代码规定
riteme.site

伪代码规定

最近博客上的伪代码越写越乱了,是时候好好定一下了。
参考了《算法导论》的伪代码风格,杂揉一些Python的写法。

注释

//后的所有内容都是注释。

1
// 这是注释

变量

以单个字符为主,小写字母可以有多个,大写字母最好只有1个。
变量的属性用.操作符来访问。
这里的变量实际上都是对实体的一个引用,类似于C++中的指针。

1
2
3
4
5
6
7
a = 1  // 第一次声明a
b = 2  // 第一次声明b
a = b  // a绑定到b上,即a和b指向同一实体
a = COPY(b)  // 将b的值复制到a
a = DEEPCOPY(b)  // 深度复制,将b中所有的引用全部复制。
a.name = "233"  // 属性的设定
b.name = a.name  // 属性的访问与设定

函数

函数的声明以function开始。
函数名称最好全部大写,如果有多个词语用-分开。
函数名后面带一个元组,表示参数。
return语句用来返回函数值。如果没有return,那么实际返回nil

1
2
3
4
function ADD-TWO-NUMBERS(a, b):
    return a + b

c = ADD-TWO-NUMBERS(1, 2)  // c = 3

操作符

=: 赋值,在if中表示判断是否相等
<: 小于
>: 大于
<=: 不大于
>=: 不小于
+: 加号
-: 减号
*: 乘号
**: 幂运算
/: 除号
mod: 取模
~: 按位取反
&: 按位与
|: 按位或
^: 按位异或
<<: 按位左移
>>: 按位右移
not: 逻辑反
and: 逻辑且
or: 逻辑或
xor: 逻辑异或

条件控制语句

if

1
2
3
4
5
6
7
8
if statement:
    // 如果为真
else if statement2:
    // ...
else if statement3:
    // ...
else:
    // ...

while

1
2
while condition:
    // ...

for

for的形式可以多样。条件可以用陈述句。

1
2
for i = 0 to 100 step 2:  // i从0到100,每次加2。
    // ...

foreach可以以不定的顺序遍历集合内的所有元素。

1
2
foreach a in A:
    // ...

对于诸如1到100的遍历,可以使用定义域。

1
2
foreach i in [1, 100]:
    // ...

内置类型

nil: 表示不存在的值
Number: 表示实数
String: 表示字符串,用""表示
Boolean: 表示布尔值,只有truefalse
Byte: 表示一个字节(通常为8bit),允许使用16进制和2进制,16进制以#开始。
Set: 表示集合,用{}表示。
所有的类型后加上[]表示该类型的数组类型。
对于元组,使用()来表示。

内置函数或语句

ASSERT statement: 断言,如果不为真则报错。
SWAP(a, b): 交换两者的引用。
delete a: 删除a这一引用
以及各种数学函数

元组

使用小括号来声明元组。

1
2
(a, )  // 如果只有一个元素,则需要带上一个额外的逗号。
(a, b, c)  // 三元组

元组可以裂解。

1
a, b = (1, 2)  // a = 1, b = 2

构成元组的方式也可以随意。

1
a, b = b, a  // 此乃SWAP的实现

如果遇到极端情况…

如果上面的规定不能满足表达算法的需要,那么有两种解决方法:

  • 从其它的语言借点语法过来,别人看得懂就行
  • 使用陈述句

记住,如果解决不了时,就用陈述句