LISP应该解决的“不太明确的问题”是什么?

时间:2011-06-19 16:41:04

标签: lisp

大多数人都认为LISP有助于解决在项目开始时没有明确定义或未完全理解的问题。

“未完全理解”“可能表明我们不知道我们要解决的问题是什么,因此开发人员不断改进问题域。但这个流程语言不是独立的吗?

所有这些改进并没有消除对开发需要解决的最终问题的算法/解决方案的需求。这就是实际的工作。

所以,如果开发人员不知道他要去哪里解决一个尚未最终确定的问题,我不确定LISP有什么优势。

3 个答案:

答案 0 :(得分:13)

当你遇到没有明确定义的问题时,Lisp(不是“LISP”)有很多优点。首先,你有一个可以快速试验的REPL - 这有助于绘制快速功能并尝试使用它们,从而导致非常快速的开发周期。其次,拥有动态类型的语言在这种情况下运行良好:使用静态类型语言,您需要在开始之前“设计更多”,并且更改设计会导致更改更多代码 - 相比之下,使用Lisps,您只需编写代码和它运行的数据可以根据需要改变。除此之外,还有一种功能语言的常见好处 - 一种具有一等lambda功能的语言等(例如,垃圾收集)。

总的来说,这些优势一直在寻找其他语言。例如,Javascript包含我到目前为止列出的所有内容。但Lisps还有一个优势,即其他语言中仍然没有 - 宏。当您的问题需要特定于域的语言时,这是一个重要的工具。基本上,在Lisp中,您可以使用特定于您的问题的结构扩展语言 - 即使这些结构导致完全不同的语言。

最后,您需要提前计划当代码不仅仅是快速实验时会发生什么。在这种情况下,您希望您的语言能够应对“将脚本增长到应用程序中” - 例如,拥有模块系统意味着您可以获得更“严肃” 应用。例如,在Racket中,您可以将解决方案分成这样的模块,其中每个模块都可以用自己的语言编写 - 它甚至具有静态类型语言,这使得可以从动态类型的开发周期开始,一旦代码变得更加稳定和/或足够大以至于维护变得困难,您就可以将一些模块切换到静态语言并从中获得通常的好处。在这种支持下,Racket在Lisps和Schemes中实际上是独一无二的,但即使在其他情况下,情况仍然比非Lisp语言更先进。

答案 1 :(得分:5)

在AI(人工智能)历史上,Lisp被视为AI汇编语言。它用于构建更高级别的语言,有助于以更直接的方式处理问题域。许多这些领域需要大量的“知识”才能找到可用的答案。

典型的例子是用于石油勘探的专家系统。专家系统作为输入(地质)观测,并提供有关寻找石油的机会,什么样的石油,在什么深度等的信息。为此,它需要'专家知识'如何解释数据。当你开始这样一个项目来开发这样一个专家系统时,通常不清楚需要什么样的推论,什么样的“知识”专家可以提供什么,以及如何为计算机写下这些“知识”。

在这种情况下,通常会在Lisp之上开发新语言,而您不使用固定的预定义语言。

作为一个例子,请参阅这篇关于Dipmeter Advisor的旧论文,这是一个由斯伦贝谢在20世纪80年代开发的基于Lisp的专家系统。

所以,Lisp没有解决任何问题。但它最初用于解决编程复杂的问题,通过提供新的语言层,可以更容易地表达域“知识”,规则,约束等,以找到不直接计算的解决方案。 / p>

答案 2 :(得分:2)

使用允许增量开发的语言的“大”胜利是您(通常)有一个与您交互的读取 - 评估 - 打印循环(或“监听器”或“控制台”),而且您倾向于不在编译和加载新代码时需要丢失状态。

保持测试运行到测试运行状态的能力意味着您的更改未触及的冗长计算可以简单地保留,而不是重新计算。

这使您可以更快地进行实验和迭代。能够更快地迭代意味着探索不那么麻烦。对于探索性编程非常有用,这是处理不太明确的问题时的典型问题。