Lisp - 在嵌套列表列表中查找最大深度

时间:2014-09-24 02:20:15

标签: list lisp common-lisp

所以我在Lisp中编写语法,想要找到语法树的最大深度。

例如,

(SENTENCE (NOUN-PHRASE (DETERMINER THE) (NOUNPLURAL MEN))
 (VERB-PHRASE-PAST 
  ((VERBPAST SAW) (NOUN-PHRASE (DETERMINER THE) (NOUNPLURAL DOGS)))))

最大深度应为4(Sentence - > verb-phrase-past - > noun-phrase - > determininer - > the。) 但是列表长度为3,并且在扩展内部列表时始终不正确。

如何编写函数来返回此最大深度(不使用任何外部库)?

1 个答案:

答案 0 :(得分:5)

(defun max-depth (tree)
  (if (atom tree)
      0
      (1+ (reduce #'max (mapcar #'max-depth tree)))))

您可能需要更改0值以符合您的规格。

注意:已修​​改为使用REDUCE而不是APPLYREDUCE没有任何列表长度限制。