通过功能实现列表

时间:2014-01-02 14:17:56

标签: list functional-programming pseudocode

我像这样实施了lists

(伪代码(或者稍微改变了Python))

function nil():
    function inner(index):
        return null          // saying that the head of an empty list is null
    return inner

function cons(list, element):
    function inner(index):
        if index = 0:
            return element
        else:
            return list(index-1)
    return inner

function head(list):
    return list(0)

function tail(list):
    function inner(index):
        return list(index+1)
return inner

作为奖励:

function map(list, f):
    if head(list) is null:
        return list
    else:
        return cons(map(tail(list), f), f(head(list)))

但是,这似乎是将列表实现为数组(或哈希表) - 使用了一个名为index的参数。但是,我想在没有内部使用索引的情况下实现列表(使用函数)。这可能吗?

1 个答案:

答案 0 :(得分:2)

您的表示最接近链表,而不是数组:您必须遍历每个元素,直到达到所需的元素。您只是使用index作为寻址列表的方式。

要获得更“忠实”的寻址方法,您可以根据Church encoding of listsinner替换为isnilheadtail操作