哪种编程语言最能弥合伪代码和实际代码之间的差距?

11

我接下来写代码的计划是先使用易读美观的伪代码来展示所有内容,然后在该结构周围实现这个程序。

如果按照我目前所知道的语言从易到难进行排序,它们分别是:

Lisp, Python, Lua, C++, Java, C

我知道每种语言都有其优点和缺点,但我特别关注伪代码。你使用什么编程语言最适合从伪代码转化为真正的代码?我总是喜欢学习新的编程语言。此外,如果你目前使用这种技术,我很想听听你对如何构建实用伪代码的任何提示。

注意:我认为这是主观的,但对于每个人的偏好而言,这有一个明确的答案。我在这里提问是因为SO社区具有非常广泛的受众,可能会提出我否则不会遇到的语言和技术。


1
我一直认为Ada看起来更像伪代码而不是真正的代码。 :-) - Nosredna
可能是什么编程语言最像英语?的重复问题。 - Anderson Green
13个回答

15

在IT技术方面,我认为Python是最好的语言,而不是Lisp,因为大多数人在写伪代码时不使用前置括号语法 :)


说实话,我从未在Lisp中编写过伪代码。不过我可以想象它会有多么棒,因为我几乎可以编写任何我想要的东西,并将其全部转换为宏。 - Kai
我必须同意Kai的观点。我从没见过伪代码用Lisp这种语言来写(虽然,这个世界上并没有太多类似Lisp的东西 :-))。伪代码被认为是给人阅读的,但我不认为很多人能轻松地理解Lisp。 - Rook
听起来你同意我的看法 :) 如果程序变得太大,Lisp很难接受,但它本来就不适合大型团队编程。对于编写代码的人来说,它往往看起来不那么混乱,当我使用Lisp时,我的思维真正流畅。 - Kai
4
我记得上大学时上的一节课,导师给了我们一个伪代码示例,要求我们用自己喜欢的编程语言将其写出。我走到黑板前,在两行末尾添加了冒号,然后坐下来。 "哦......对......是Python" 我们的导师用干燥的语气评论道 :-P - Smashery

7

Pascal在这种伪代码描述中相对较为流行。


7
你可能会对文学编程感兴趣,其中你写的“源代码”更像是写书,但它是一本可以“交织”成真正代码或格式化文档的书。
请参阅http://www.literateprogramming.com/cweb_download.html提供的示例。
你可能还会发现Eiffel有趣:
“... Eiffel避免使用编码技巧或编码技术,这些技术旨在优化编译器。目标不仅是使代码更易读,而且还允许程序员专注于程序的重要方面,而不会陷入实现细节中。”

非常有趣!我一定会去了解这些的。 - Kai

4

我认为这取决于伪代码的具体类型。我在算法教材中看到的大部分伪代码都像帕斯卡语言一样,具有讽刺意味。 帕斯卡一直被认为是一种很好的教学语言。


1
几秒钟就能打败我。是的,尤其是在数学家中间——当我现在与他们交谈时,大多数伪代码看起来仍然像Pascal。 - Rook

2

这里是我认为第一个将Python称为“可执行伪代码”的参考链接。这篇文章摘自澳大利亚墨尔本个人电脑用户组的杂志PC Update 2001年8月刊。


1

TCL语法最像伪代码。命令优于函数,更易读,并表达了汇编代码更典型的低级操作。同时,高级算法也很容易阅读。语法的一致性使用户可以专注于步骤而不是语言构件。我甚至会说数学运算关键字“expr”是一个优势,因为它清晰地划分了程序中的数学部分和算法部分。少量符号被重载,而像“set”这样的单词则被用来代替。这是伪代码的又一胜利。与任何其他语法相比,TCL跨越了函数式和命令式风格之间的差距。


1

我发现Boo已经成为我的“伪代码”语言,用于测试.NET的小代码块。它的语法与Python非常相似。


1

你已经提到了它,但是...

Python具有非常清晰的语法。它非常接近伪代码,并且易于阅读。


1
我不太同意。Python也许有一个简洁的语法,但它并不适合作为伪代码。因为伪代码必须很容易地翻译成你选择的语言,而Python依赖于后端库,因此将其翻译成其他语言可能会很困难。在编写伪代码时,最好使用一种几乎没有“背景知识”的语言。当然,这只是我的个人看法。 - Rook
我喜欢 Python 的一件事情是你可以这样做:x = 0 if stuff else 1 - alexpinho98

1

我认为你有点搞反了。这个问题的问题在于,你倾向于用你计划使用的实际代码语言的近似形式来编写伪代码。请举手谁想创建一个伪代码语言(像世界语一样?),它是常用编程语言的混合体。


0

Prolog是您可能不会遇到的东西。它完全回避了伪代码的问题。从某种意义上说,没有代码。只有事实和规则。

例如,附加谓词只是我们知道关于列表的事情,如下所示:
将列表Y附加到空列表会产生Y。

append([], Y, Y).

如果将Xs附加到Ys会产生Zs,那么我们可以在Xs和Zs前面添加相同的值,关系仍然成立。
append([X|Xs], Ys, [X|Zs]) :- append(Xs, Ys, Zs). 

我们实际上还没有编写能够执行操作的代码。我们只是说出了我们对于列表追加的了解。但现在我们可以让Prolog来追加两个列表:

?- append([1,2],[3,4],Z).
Z = [1, 2, 3, 4].

或者给Prolog一个列表,然后让它展示我们可以添加哪些列表来得到目标列表:

?- append(X,Y,[1,2]).
X = [],
Y = [1, 2] ;
X = [1],
Y = [2] ;
X = [1, 2],
Y = [] ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接