我想在薄荷细节中理解我们如何设法从Y-combinator的lambda演算中获得:
Y = ?f.(?x.f (x x)) (?x.f (x x))
Run Code Online (Sandbox Code Playgroud)
到以下实现(在Scala中):
def Y[A, B](f: (A => B) => A => B): A => B = (x: A) => f(Y(f))(x)
Run Code Online (Sandbox Code Playgroud)
我对函数式编程很陌生,但我对lambda演算以及替换过程的工作方式有了不错的理解.然而,我很难理解我们是如何从正式表达式实现的.
此外,我想知道如何告诉我的函数的参数的类型和数量以及它的返回类型是什么lambda?
recursion functional-programming scala lambda-calculus y-combinator
在Java®虚拟机规范的第2.7节"对象表示"中,它说:
在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身是一对指针:一个指向包含对象方法的表和指向表示Class对象的指针对象的类型,另一个是从堆为对象数据分配的内存.
我的印象是句柄有三个指针而不是两个:
任何人都可以帮我解决这个困惑.
我试图将一个字节数组转换为LinkedList<Byte>:
//data is of type byte[]
List<Byte> list = Arrays.stream(toObjects(data)).boxed().collect(Collectors.toList());
Byte[] toObjects(byte[] bytesPrim) {
Byte[] bytes = new Byte[bytesPrim.length];
Arrays.setAll(bytes, n -> bytesPrim[n]);
return bytes;
}
Run Code Online (Sandbox Code Playgroud)
第一行引发一条错误消息:
该
boxed()类型的方法未定义Stream<Byte>.
知道为什么我会收到此错误消息以及如何规避这个问题吗?