Implementando notação de fatia python

Estou tentando reimplementar pythonnotação de fatia em outra linguagem (php) e procurando por um trecho (em qualquer idioma ou pseudocódigo) que imite a lógica python. Isto é, dada uma lista e um triplo(start, stop, step) ou uma parte dele, determine valores corretos ou padrões para todos os parâmetros e retorne uma fatia como uma nova lista.

Eu tentei investigara fonte. Esse código está muito além das minhas habilidades, mas não posso deixar de concordar com o comentário dizendo:

/* this is harder to get right than you might think */ 

Além disso, se algo como isto já estiver feito, os ponteiros serão muito apreciados.

Esta é a minha bancada de teste (verifique se o seu código passa antes de postar):

#place your code below
code = """
def mySlice(L, start=None, stop=None, step=None):
or 
<?php function mySlice($L, $start=NULL, $stop=NULL, $step=NULL) ...
or 
function mySlice(L, start, stop, step) ...
"""

import itertools

L = [0,1,2,3,4,5,6,7,8,9]

if code.strip().startswith('<?php'):
     mode = 'php'

if code.strip().startswith('def'):
     mode = 'python'

if code.strip().startswith('function'):
     mode = 'js'

if mode == 'php':
    var, none = '$L', 'NULL'
    print code, '\n'
    print '$L=array(%s);' % ','.join(str(x) for x in L)
    print "function _c($s,$a,$e){if($a!==$e)echo $s,' should be [',implode(',',$e),'] got [',implode(',',$a),']',PHP_EOL;}"

if mode == 'python':
    var, none = 'L', 'None'
    print code, '\n'
    print 'L=%r' % L
    print "def _c(s,a,e):\n\tif a!=e:\n\t\tprint s,'should be',e,'got',a"

if mode == 'js':
    var, none = 'L', 'undefined'
    print code, '\n'
    print 'L=%r' % L
    print "function _c(s,a,e){if(a.join()!==e.join())console.log(s+' should be ['+e.join()+'] got ['+a.join()+']');}"


print

n = len(L) + 3
start = range(-n, n) + [None, 100, -100]
stop  = range(-n, n) + [None, 100, -100]
step  = range(-n, n) + [100, -100]

for q in itertools.product(start, stop, step): 

    if not q[2]: q = q[:-1]

    actual = 'mySlice(%s,%s)' % (var, ','.join(none if x is None else str(x) for x in q))
    slice_ = 'L[%s]' % ':'.join('' if x is None else str(x) for x in q)
    expect = eval(slice_)

    if mode == 'php':
        expect = 'array(%s)' % ','.join(str(x) for x in expect)
        print "_c(%r,%s,%s);" % (slice_, actual, expect)

    if mode == 'python':
        print "_c(%r,%s,%s);" % (slice_, actual, expect)

    if mode == 'js':
        print "_c(%r,%s,%s);" % (slice_, actual, expect)

como usá-lo:

salvar em um arquivo (test.py)coloque o seu código python, php ou javascript entre"""scorrepython test.py | python oupython test.py | php oupython test.py | node

questionAnswers(6)

yourAnswerToTheQuestion