【发布时间】:2021-08-09 10:19:53
【问题描述】:
近年来,“函数式编程”的许多元素已经进入 Java,尤其是 Java 8。我想到了 lambda 表达式、函数式接口、Java 泛型、流接口、可选类等。
我的问题是,是否还有任何新的类/接口/语法已添加到 Java 并源于“逻辑编程”范式?或者是否有计划这样做?
(参见例如here 对这两种方法的比较)
【问题讨论】:
近年来,“函数式编程”的许多元素已经进入 Java,尤其是 Java 8。我想到了 lambda 表达式、函数式接口、Java 泛型、流接口、可选类等。
我的问题是,是否还有任何新的类/接口/语法已添加到 Java 并源于“逻辑编程”范式?或者是否有计划这样做?
(参见例如here 对这两种方法的比较)
【问题讨论】:
逻辑编程语言(例如 Prolog)允许将程序编写为真理陈述和它们之间的关系,因此该语言的实现本质上是一种算法,它搜索满足所有程序声明性陈述的解决方案。
因此,Java 要支持“开箱即用”的逻辑编程,标准库必须包含这样的搜索算法。据我所知,事实并非如此。但是,有第三方库可以这样做; Google 搜索“Java logic programming library”会产生几个(constraint programming libraries 同样。)
这些库通常将语句和关系表示为 Java 对象,并包含一个算法(或可能有几个可供选择的算法)的实现,以便搜索解决方案。考虑到这些库的可用性、复杂性和多样性,Java 标准库中似乎不太可能添加等价的东西。
【讨论】:
Java 支持predicates,函数式接口接受一个参数并根据参数是否使谓词的条件为真或假而返回真或假。这类似于您链接的问题中提到的 Prolog 谓词。
【讨论】:
Predicate 函数式接口并不真正类似于Prolog 中的谓词;请参阅 OP 中链接的问答进行讨论。