上述问题要单独写一个def函数,不能把deep_map写在Link类中
时间: 2024-03-03 16:50:21 浏览: 12
好的,那么下面是将 `deep_map` 函数单独实现的代码:
```python
class Link:
empty = ()
def __init__(self, first, rest=empty):
assert rest is Link.empty or isinstance(rest, Link)
self.first = first
self.rest = rest
def __repr__(self):
if self.rest is not Link.empty:
rest_repr = ', ' + repr(self.rest)
else:
rest_repr = ''
return 'Link(' + repr(self.first) + rest_repr + ')'
def __str__(self):
string = '<'
while self.rest is not Link.empty:
string += str(self.first) + ' '
self = self.rest
return string + str(self.first) + '>'
def deep_map(fn, link):
new_first = fn(link.first)
if isinstance(link.first, Link):
new_first = deep_map(fn, link.first)
if link.rest is Link.empty:
return Link(new_first)
else:
return Link(new_first, deep_map(fn, link.rest))
```
以上代码中,我们将 `deep_map` 函数单独实现。该函数接受一个函数 `fn` 和一个链表 `link`,然后应用该函数到链表中的每个元素并返回一个新的链表。在 `deep_map` 函数中,我们首先对第一个元素应用 `fn` 函数,如果第一个元素是一个 Link 实例,那么我们需要递归地对其应用 `deep_map` 函数。然后,我们检查链表的 `rest` 属性是否为空,如果不为空,我们需要对 `rest` 属性递归地应用 `deep_map` 函数,并将新的第一个元素和新的 `rest` 属性传递给 `Link` 构造函数来构造一个新的链表。最后返回这个新的链表。