1

reverse()Pythonで再帰的に定義されたリストクラスに取り組んでいますが、再帰的に機能するメソッドのコーディングに問題があります。これがクラスの基礎です。

class RecList:
  def __init__(self):
    self._head = None
    self._rest = None

基本ケースはself._headで、リストの最初のエントリであり、その後に再帰的なケースが続きます。再帰的なケースは、本質的に、開始する独自のリストを含み、self._head再帰的に定義されます。self._headこれは、との両方が存在する最下位レベルまで続きself._rest = Noneます。このように定義されたリストの逆メソッドをコーディングする簡単な方法はありますか?

4

2 に答える 2

0

これを試して:

class RecList:
  def __init__(self, head=None, rest=None):
    self._head = head
    self._rest = rest
  def __str__(self):
    if self._rest is None:
        return str(self._head)
    return str(self._head) + ' ' + self._rest.__str__()
  def reverse(self):
    return self._reverse_aux(None)
  def _reverse_aux(self, acc):
    if self._rest is None:
        return RecList(self._head, acc)
    return self._rest._reverse_aux(RecList(self._head, acc))

lst = RecList(1, RecList(2, RecList(3, None)))
print lst
> 1 2 3
print lst.reverse()
> 3 2 1
于 2012-04-21T23:13:25.097 に答える
0
class RecList:
  def __init__(self, head, tail):
    self.head = head
    self.tail = tail

def foldr(f, acc, xs):
    head = xs.head
    tail = xs.tail

    if tail:
        return foldr(f, f(head, acc), tail)
    else:
        return f(head, acc)

testList = RecList(1, RecList(2, RecList(3, None)))
test = foldr(lambda x, a: RecList(x, a), RecList(None, None), testList)

print test.head
print test.tail.head
于 2012-04-21T23:14:02.663 に答える