使用Hylang的Python递归错误

使用Hylang的Python递归错误,python,recursion,lisp,the-little-schemer,hy,Python,Recursion,Lisp,The Little Schemer,Hy,首先,让我说我知道我所做的并不理想,但我正试图写下成员?函数从使用Hy (setv else True) (defn null? [lst] " If list is empty return True else False " (if lst False True)) (defn member? [a lat] " Checks if value is a member of a list " (cond [(null? lat) Fals

首先,让我说我知道我所做的并不理想,但我正试图写下成员?函数从使用Hy

(setv else True)

(defn null? [lst]
  " If list is empty return True else False "
  (if lst
      False
      True))


(defn member? [a lat]
  " Checks if value is a member of a list "
  (cond
    [(null? lat) False]
    [else (or (= (first lat) a)
              (member? a (rest lat)))]))

(print (member? 1 '(2 3 4 1)))
这正是我所期望的。问题是,如果列表长度大于4个元素,我会得到错误

RecursionError: maximum recursion depth exceeded while calling a Python object
我知道Python并不打算做递归,它甚至说有一个默认的递归限制来防止C堆栈溢出。在我的机器上,
getrecursionlimit()
产生1000的值,我成功地将其设置为20000以上,然后才出现segfault。即使设置为20000,我仍然会在5个元素的列表中得到错误。我不明白的是。。。我是如何在一个5元素列表中达到超过20000个递归级别的

对于那些好奇的人,我正在15英寸Macbook pro上使用Python 3.6.5、MacOS Mojave版本10.14.6、Hylang版本0.18.0,我的程序使用hy2py的输出是

from hy.core.language import first, rest
from hy import HyExpression, HyInteger
hyx_else = True


def is_null(lst):
    """ If list is empty return True else False """
    return False if lst else True


def is_member(a, lat):
    """ Checks if value is a member of a list """
    return False if is_null(lat) else first(lat) == a or is_member(a, rest(lat)
        ) if hyx_else else None


print(is_member(1, HyExpression([] + [HyInteger(2)] + [HyInteger(3)] + [
    HyInteger(4)] + [HyInteger(5)] + [HyInteger(1)])))

我无法在Hy master上复制此错误。这可能是自0.18.0以来修复的错误