我只是想知道是否有人知道如何在伪代码中表示前提条件,因为我环顾四周找不到任何关于该主题的内容。
谢谢
根据定义,伪代码不是形式化的代码。使用伪代码为 C# 方法定义前提条件的示例如下:
// Precondition: Object must have been initialized by calling init() or by
// manually setting properties X and Y such that X.Foo >= Y.Bar.
public void doUsefulWork() {
...
}
显然,由于伪代码没有形式化,编译器无法对其进行验证。
我在这里看到两种可能性:
如果您可以将您的条件表述为真实代码,我会尝试使用断言编程(或 .NET 等效的Debug.Assert)。这样,您实际上可以在运行时检查您的条件assert condition
如果不是这种情况,或者您根本不想这样做,您可以将前置条件和后置条件写入您的 JavaDoc。
/**
* @precondition: the connection has been established.
*
* @postcondition: the schema is created.
*
*/
您甚至可以定义这些JavaDoc 注释,以便它们出现在 JavaDoc 生成的文档中。这样你就可以使用自然语言来定义你想要断言的内容。
您还可以更数学地表达您的前置条件和后置条件,以增加条件的简洁性,这可能会使它们更易于理解:
对于简单的数字比较,您当然可以使用<
, <=
, >
,>=
等。但是假设您想为 a 定义不变量,Set
那么您可以将其表示为:
/**
* @invariant: set == filterDuplicates(set)
*
*/
从而利用假设/伪函数来表达您的条件。
如果您喜欢函数式语言,则可以进一步开发。我的数据结构和算法教授使用Haskell为新引入的数据结构定义前置条件、后置条件和不变量:
module TreeSets(TreeSet,
contains, add, remove, card, traverse)
where
data Ord t => TreeSet t = E | N (TreeSet t) t (TreeSet t)
inv E = True
inv(N l x r) = all(<x)(abs l) && all(>x)(abs r) &&
inv l && inv r
这真的取决于你为谁写这篇文章,因此我的建议是使用自然语言。每个人都可以理解,尤其是面向对象的程序最容易制定。