gpt4 book ai didi

java - java中的声明式编程

转载 作者:行者123 更新时间:2023-11-30 06:30:43 25 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




9年前关闭。




我有一个关于声明式编程的问题,看看我对这个概念的理解程度。我有一项作业说明我应该以“声明式方式”用 Java 制作一个数独解谜器。查找这意味着什么,我发现了很多模棱两可的定义,说明程序应该以描述必须完成的方式而不是指定如何完成的方式编写。环顾四周,我发现了一个有趣的例子,有人用列表来解释它,特别是过滤列表的奇数。

命令式(称为函数):

List resultList = new List()
foreach element in startlist
do if element % 2 == 1
do add element to resultList
od
od
return returnList

声明式风格(调用上下文):
newList = startList.filter(num -> num%2 ==1)

所以在声明式风格中,指定了我们想要保留的元素,但没有指定列表的制作方式。这被抽象为列表的 API。

我的简单问题是:这种方法是否意味着列表库不是声明性的,因为算法被移到了那里?在这种情况下,术语“声明性”适用于调用此库的程序部分。因此,程序是不是不可能 100% 声明性的,因为(当然)某处需要一个算法来指定事情是如何完成的?如果我在这里错了,请纠正我,因为这将是我对声明性概念的理解的核心。

无论如何,我正在考虑将数独求解器编写为我自己的库(包含所有“命令式”逻辑,包含在“声明式”函数编程风格中)和解决问题所应采取的步骤的规范的组合数独,作为对这些库的调用。我还想我可以使用 Command 模式作为包装器,以在 Java 中将函数作为参数传递,以进一步使求解器类更具“声明性”。我已经对此进行了试验,并尝试了类似 newList = startList.filter(new OddNumberCommand()) 的方法。 , 与 OddNumberCommand具有 execute 的命令函数,将列表中的一个元素作为参数,如果要从结果列表中保留或丢弃该元素,则返回 true 或 false。

无论如何,这只是我的思绪旋转的方式,我想求助于更好地理解这个概念的其他人的帮助,以确保我走的是正确还是错误的道路。请让我知道我错在哪里以及我的推理中什么是正确的,以便我可以学习正确使用声明式编程。

谢谢

最佳答案

正如评论者所说,您的示例更像是函数式编程而不是声明式编程,尽管两者在某些方面相似。在真正的声明式编程中,您将更加注重结果——您将指定如何处理列表中的有趣元素,而不是为了它本身而转换列表。像 Jess 这样的规则引擎是声明式编程系统的一个示例(免责声明,我是 Jess 的作者。)

回答你一个简单的问题:是的。所有函数式或声明式编程系统都涉及运行时系统,该系统必须在运行程序的真实计算机上实现。由于真正的计算机总是命令式冯诺依曼机,因此必须以命令式方式编写运行时系统。因此,它是您的程序和硬件之间的附加抽象层。

关于java - java中的声明式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com