Lisp 这里怎么用地图车?

Lisp 这里怎么用地图车?,lisp,common-lisp,Lisp,Common Lisp,pt是一个类(pt children节点)生成节点的子节点,这些子节点也是pt对象attr是一个字符串。如果我写入get value if attrib present以返回pt对象的值,如果该对象具有匹配的attr,那么我如何在此处(在##############处)获取节点的所有子级值的列表 对于通用Lisp,请使用以下函数之一: REMOVE-IF IF-NOT删除 删除 他们浏览列表并删除项目。保留你想要的 其他方面的循环可以: (defun find-attr (node attr

pt
是一个类
(pt children节点)
生成
节点的子节点,这些子节点也是
pt
对象
attr
是一个字符串。如果我写入
get value if attrib present
以返回
pt
对象的值,如果该对象具有匹配的
attr
,那么我如何在此处(在##############处)获取
节点
的所有子级值的列表

对于通用Lisp,请使用以下函数之一:

  • REMOVE-IF
  • IF-NOT删除
  • 删除
他们浏览列表并删除项目。保留你想要的

其他方面的
循环
可以:

(defun find-attr (node attr)
    (let ((children (pt-children node)))
      (if (null children)
          nil
          (let ((subchildren (mapcar ##############

(get-value-if-attrib-present (node attrib) ...)
IT
是一个
循环
功能->它指的是
WHEN
子句中谓词返回的值。

映射方法:

(LOOP for item in some-list
      when (predicate-p item)
      collect it)
mapcan
期望函数返回列表,并以破坏性方式将它们关联起来。因此,您必须小心不要返回lambda中引用的列表,或任何来自其他地方的列表(此处未使用)


在《人工智能编程范例》(a.k.a PAIP)中,Peter Norvig引入了一个
mappend
函数,该函数做同样的事情,但没有破坏性。有时候,在你的工具箱里放上它是很有用的。

omg,它不起作用。。。因此这里是SO.remove函数就是我需要的!我不知道loop有回指;这是一个有用的特性
;; assuming get-value-if-attrib-present simply returns nil when not present
;; (i.e. your attribute value cannot be nil without ambiguity)
;;
;; get the list of values from the children, matching attrib
;;
(mapcan (lambda (child)
          (if (get-value-if-attrib-present child attrib)
            (list child)))
        children)