小编Ant*_*hov的帖子

Kotlin函数参数:Val不能重新分配

我在Kotlin写了红黑树.有趣的insertFixup在插入新元素后恢复平衡(z:Node?是新元素).树平衡算法从这里开始(第2-3页).该问题是,科特林不允许我重新分配 žz.parentz.parent.parent.我希望z成为一个指针.问题是如何让Kotlin明白我对他的要求?

class Node(key: Int) {...}

class BinarySearchTree {
    var root: Node? = null

    fun insert(newNode: Node) {...}

    fun RotateLeft(x: Node?) {...}

    fun RotateRight(x: Node?) {...}

    fun insertFixup(z: Node?) {
        var y: Node?
        while (z?.parent?.color == "RED") {
            if (z?.parent == z?.parent?.parent?.left) {
                y = z?.parent?.parent?.right
                if (y?.color == "RED") {
                    z?.parent?.color = "BLACK"
                    y?.color = "BLACK"
                    z?.parent?.parent?.color = "RED"
                    z = …
Run Code Online (Sandbox Code Playgroud)

pointers var kotlin

11
推荐指数
2
解决办法
2万
查看次数

Kotlin:泛型数组

我正在写一棵B树,它的一个节点可能有很多键,我遇到了一个问题。当我创建一个Int数组时,一切正常:

class Node<K: Comparable<K>> (val t: Int) {
    val keys: Array<Int?> = Array<Int?> (t*2-1, {null})
}
Run Code Online (Sandbox Code Playgroud)

但我想创建一个泛型K数组:

class Node<K: Comparable<K>> (val t: Int) {
    val keys : Array<K?> = Array<K?> (t*2-1, {null})
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器会抛出以下错误消息:

'Kotlin: Cannot use 'K' as reified type parameter. Use a class instead.'
Run Code Online (Sandbox Code Playgroud)

问题是如何创建泛型数组?

UPD:感谢所有回复!看来MutableList对于我的目标来说是一个很好的解决方案。

arrays generics kotlin

4
推荐指数
1
解决办法
2532
查看次数

学习Haskell语法

我学习Haskell,但却陷入了困境:

add 0 = id
add x = add(x-1) . (+1)
Run Code Online (Sandbox Code Playgroud)

此函数通过向第一个参数添加1并从第二个参数减去1来向另一个参数添加一个参数.

*Main> add 4 2
6
Run Code Online (Sandbox Code Playgroud)

但是,我真的不明白它是如何工作的!任何人都可以解释为什么我们在'add'之后写了2个数字(虽然只用一个参数'x'来描述),'.'是什么?并且第二行中的'(+1)'表示所有这些都有效吗?

谢谢!

UPD:再次感谢所有答案!现在我明白它是如何工作的:)

syntax haskell

1
推荐指数
2
解决办法
109
查看次数

标签 统计

kotlin ×2

arrays ×1

generics ×1

haskell ×1

pointers ×1

syntax ×1

var ×1