我像这样实施了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
的参数。但是,我想在没有内部使用索引的情况下实现列表(使用函数)。这可能吗?
答案 0 :(得分:2)
您的表示最接近链表,而不是数组:您必须遍历每个元素,直到达到所需的元素。您只是使用index
作为寻址列表的方式。
要获得更“忠实”的寻址方法,您可以根据Church encoding of lists将inner
替换为isnil
,head
和tail
操作