Java8kanren

用 Java 编写的 miniKanren 实现
授权协议 BSD
开发语言 Java
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 不详
投 递 者 子车修平
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Java8kanren 是用 Java 编写的 miniKanren 实现。

miniKanren  是一类关系型编程语言。miniKanren 可以通过给定的关系表达式和计算结果来反向推导,找出符合条件的输入变量的取值组合。程序员可以通过加入关系表达式对输入变量和计算结果添加约束条件。miniKanren 通过“搜索树”的办法来搜索所有可能的输入变量。如果搜索空间非常大而且符合条件的结果不存在,miniKanren 的搜索有可能永远也不会停止。

evalo 是一个用 miniKanren 写的程序,evalo 是以关系表达式为输入和输出的程序。在 miniKanren 中调用 evalo 的方法是:(evalo q q)。evalo 具有自产生程式的功能。

Dan Friedman 的 “The Reasoned Schemer” 一书使用 miniKanren 来介绍关系型编程。该书还提供了 miniKanren 在 Scheme 语言上的一个完整实现。该实现的核心代码的长度仅仅只有两页纸。miniKanren 的 Scheme 实现的设计目的是容易理解,修改并扩展。

目前,Haskell、Racket、 Ruby、Clojure 以及 Python 中有 miniKanren 的具体实现。其中最典型的实现是 Scheme 的版本。Clojure 语言里的 core.logic 也是受到 miniKanren 启发。

  • Java的演变过程 Java从头到尾都是被设计成为一门面向对象的语言,所以时间长了,它就积累了很多的有用的库。从头开始,他就拥有多线程处理的能力。最重要的是Java里面有两个非常强大非常超前的两个概念:jvm和Java字节码。 Java虚拟机( JVM)及其字节码可能会变得比Java语言本身更重要,而且对于某些应用来说, Java可能会被同样运行在JVM上的竞争对手语言(如Scala或Groovy

  • 1、分组,计数,排序 public class Java8Example1 { public static void main(String[] args) { List items = Arrays.asList( "apple", "apple", "orange", "orange", "orange", "blueberry", "peach", "peach", "peach", "pe

  • 从 JDK8 之后,Java 的更新策略改为以时间驱动的方式,每六个月发布一个新的Java版本,每三年发表一个长期支持版本。一般如果要对旧 JDK 进行升级,都会选择长期支持版,JDK11 和最近更新的 JDK17 是长期支持版本。但是由于商业项目更看重稳定性,更新 JDK 带来的收益不大,大多数人不愿意踩坑去更新 JDK。因此,很多人都只是从新闻了解到新 JDK 的新特性,平常开发没有接触到,甚

  • java 8 集合分组 在继续阅读Venkat Subramaniam的“ Java函数式编程 ”时,我到达了介绍Stream#collect函数的那部分。 我们想收集一个人,按年龄分组并返回一张方便的地图(年龄->人的名字)。 要刷新,这是Person类的样子: static class Person { private String name; private int age;

  • 背景:希望List  可以根据某个字段 进行分组 然后拆分 使用Java 8 的流来做。 java.util.stream.Collectors#groupingBy(java.util.function.Function super T,? extends K>, java.util.stream.Collector super T,A,D>) 使用Group By 方法 默认会转换为 List

  • Java默认使用的协议版本 Java版本 HTTPS请求默认使用的TLS版本 支持的协议 JDK7 TLSv1 TLSv1、TLSv1.1、TLSv1.2、SSLv3 JDK8 TLSv1.2 TLSv1、TLSv1.1、TLSv1.2、SSLv3 JDK11 TLSv1.3 TLSv1、TLSv1.1、TLSv1.2、TLSv1.3、SSLv3 协议版本不支持的异常信息 Exception in

 相关资料
  • 问题内容: 我正在尝试根据从《 AI游戏程序员的技术》一书中选取的技术编写一种遗传算法,该技术对种群的基因使用二进制编码和适应性比例选择(也称为轮盘选择)。在程序内以二维数组随机生成。 最近,我遇到了一段伪代码并尝试实现它,但是遇到了一些我需要做的事情方面的问题。我检查了许多书籍和一些开源代码,但仍在努力取得进展。我了解我必须获得总体适应度的总和,在总和与零之间选择一个随机数,然后如果该数字大于父

  • 问题内容: 我正在为Pascal的子集编写编译器。编译器为一台组装好的机器生成机器指令。我想为此机器语言编写一个窥孔优化器,但是我无法替换一些更复杂的模式。 窥孔优化器规格 我研究了几种编写窥孔优化器的方法,并且选择了后端方法: 每当要生成机器指令时,编码器都会调用函数。 检查猫眼优化表: 如果当前指令与模式的尾部匹配: 检查先前发出的说明是否匹配 如果所有指令都与该模式匹配,则应用优化,修改代码

  • 问题内容: 有人可以指出我正确的方向,以便在Java中写入Excel文件吗?我不了解我在网上找到的链接。您能给我发送链接还是我可以遵循的任何方式? 谢谢J 问题答案: 并不是平庸,但是Apache POI可以做到。您可以在此处找到一些代码示例: http //poi.apache.org/spreadsheet/examples.html

  • 问题内容: Sun 用什么语言写? 问题答案: Sun实际上有多个JVM。所述热点JVM在C ++主要被写,因为热点在很大程度上基于所述Animorphic Smalltalk的VM被用C ++编写 。 比HotSpot更有趣的是IMHO Maxine Research VM ,它几乎完全用Java编写。

  • 问题内容: 一切在命令行上都可以正常运行,但是当我将所需的内容转换为Java时,接收过程在stdin上什么都收不到。 这是我所拥有的: 脚本“ count-the-bytes”很简单: 输出表明该函数挂在’wc -c’行-永远不会到达’counted stdin bytes’行。 这是怎么回事?使用Jsch会有所帮助吗? 问题答案: 您可能希望在wc -c返回之前尝试关闭输出流。

  • 问题内容: 我简要阅读了有关Maxine的信息,这是一个用Java编写的开源JVM实现。这对我来说听起来很圆。如果java要求运行虚拟机,那么如何用Java编写虚拟机本身(VM代码是否需要运行VM的虚拟机,依此类推?)。 编辑 :好的,所以我看到我忽略了Java不必在VM中运行的事实。那如何解释如何用LISP编写LISP编译器呢?还是这完全是一个新问题? 问题答案: 最初,您认为Java需要虚拟机