我正在编写一本关于计算机科学主题的相当长的专着 . 但是,我经常发现自己处于用数学术语编写计算机科学概念的位置,这对我来说很难 . 例如,假设我想编写for循环或void函数 . 我大部分时间都去我的Knuth或Cormen或Sedgewick,但现在还不够 . 是否有“手册”或一些文本我可以将计算机科学转化为数学?
编辑:让我更具体(谢谢,Uri) . 我的意思是:例如,我有一个无效的函数,它返回一个长度为n的随机字符串 . 这引起了我的好奇心,我甚至不知道如何在数学中表示虚函数......但是,这只是一个例子 . 我受到这些问题的困扰 . 谢谢 .
4 回答
求和或产品符号可能会替换一些for循环 . 其他人可能被表达为逻辑量词(“存在i使得[i]具有某些属性”或“a [i]具有所有i的某些属性”) . (对不起,我不知道如何在Markdown中呈现这些...希望你明白这一点 . )
“无效函数”...嗯,也许是一些方便的逻辑符号来表示前置条件和后置条件,因为这些函数只对它们的副作用有用吗?
但我认为大多数数学家都会熟悉算法的描述,以理解任何中途合理的伪代码约定 . 试着远离任何需要某种特定编程语言的“语言 - 律师”技能水平的东西 .
我认为你必须更加具体 . 你在谈论翻译算法吗?将代码编写为伪代码?
还有更多的“数学”形式,其中许多用于程序的形式验证 . 它们通常基于离散数学 .
根据你想要做的事情,Hoare Logic是表示算法步骤的好方法,恕我直言 .
您还可以使用Z notation正式指定一些体系结构和协议 .
为了解决你的具体问题:在数学中,如果它不带参数并返回一个长度为n的随机字符串,它可能根本不是一个函数!也就是说,如果f()不等于f()(例如,用f()= rand())那么根据定义f()不是函数 . 你可以用不同的方式解决这个问题,具体取决于你的偏好:你可以传递state参数并让它返回修改后的状态参数,或者你可以使它成为一个多值函数并返回所有可能的值,或者你可以使用两个函数: f(n,state)给出下一个长度为n的随机字符串,而g(n,state)在生成f(n,state)后给出新状态 .
您可以通过Alexander Stepanov和Paul McJones来研究Elements of Programming: