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)