伪代码规定
最近博客上的伪代码越写越乱了,是时候好好定一下了。
参考了《算法导论》的伪代码风格,杂揉一些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
: 表示布尔值,只有true
和false
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的实现 |
如果遇到极端情况…
如果上面的规定不能满足表达算法的需要,那么有两种解决方法:
- 从其它的语言借点语法过来,别人看得懂就行。
- 使用陈述句。
记住,如果解决不了时,就用陈述句。