LISP在python中有所体现

tek*_*agi 8 lisp python cons

consPython中有相同的东西吗?(2.5以上的任何版本)

如果是这样,它是否内置?或者我需要easy_install做一个模块吗?

dan*_*n04 7

在Python中,使用基于数组的list类比使用Lisp样式的链表更典型.但是它们之间的转换并不太难:

def cons(seq):
    result = None
    for item in reversed(seq):
        result = (item, result)
    return result

def iter_cons(seq):
    while seq is not None:
        car, cdr = seq
        yield car
        seq = cdr

>>> cons([1, 2, 3, 4, 5, 6])
(1, (2, (3, (4, (5, (6, None))))))
>>> iter_cons(_)
<generator object uncons at 0x00000000024D7090>
>>> list(_)
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)


Ale*_*ong 7

警告:以下材料可能不实用!

实际上,cons在Lisp中不需要是原始的,你可以用λ构建它.有关详细信息,请参阅在SICP中使用lambda for cons/car/cdr定义.在Python中,它被翻译为:

def cons(x, y):
    return lambda pair: pair(x, y)

def car(pair):
    return pair(lambda p, q: p)

def cdr(pair):
    return pair(lambda p, q: q)
Run Code Online (Sandbox Code Playgroud)

现在,car(cons("a", "b"))应该给你'a'.

那个怎么样?前缀方案:)

显然,您可以使用cdr递归开始构建列表.您可以nil在Python中定义为空对.

def nil(): return ()
Run Code Online (Sandbox Code Playgroud)

请注意,您必须=在Python中使用绑定变量.我对吗?因为它可能会改变变量,所以我宁愿定义常量函数.

当然,这不是Pythonic而是Lispy,不那么实用而且优雅.

练习:在Python中实现Scheme 的列表库http://srfi.schemers.org/srfi-1/srfi-1.html.开玩笑 :)