(以下问题与 OCaml 语言有关,并在 OCaml 中有示例,但这个问题非常笼统,可能任何其他计算机语言的正确答案也可以解决我的问题。所以,只要用你最喜欢的语言假设这个问题。)
我想编写一个函数,它将 OCaml 中的任意程序作为字符串并确定程序是正确还是不正确,在后一种情况下,我是否可以通过在末尾连接适当的字符来使其成为正确的.
我假设某处有该语言的编译器,并且我可以应用它并得到回复说“编译”或“不编译 - 第 X 行错误,字符 Y”(大多数情况下无论如何语言)。总之,我想要一个函数,它接受一个程序并返回:
- 正确——如果字符串包含正确的程序;
- 错误——如果字符串包含不正确的程序,无论你如何将字符连接到它,都永远不会正确;
- 不完整——如果字符串包含一个不错误的不正确的程序。
例如,OCaml 程序let x = f
是不正确的,因为f
它在使用时尚未定义。而且它不能继续,因为你在 f 之后写的任何东西都将永远是一些以前没有定义过的标识符。程序let x =
也不正确;但是如果我们扩展到let x = 5
then 我们有一个完全有效的程序。所以,我的函数应该在第一种情况下返回错误,在第二种情况下返回不完整。
如果我们有这个程序,事情可能会变得棘手
let ans = 5
let x = a
因为我的功能必须看到,如果我继续程序,ns
那么程序就会变得正确。
我的问题是:您认为可以编写这样的函数/算法吗?如果是这样,一般的想法是什么?如果不是,试着说服我它不是。
(我会对任何见解或部分答案感到满意,例如暗示不完整的东西。例如,我相信如果语言编译器说第 3 行有错误并且程序有 100 行,那么就不可能继续的程序。)