.Gösterimle gerçekten kafam karıştı . Mı '(a . b)bir liste?
(listp '(a . b))döner tancak uzunluğunu bilmek istediğimde (length '(a . b))bir hata veriyor Wrong type argument: listp, b. Aynı şey, nth,mapcarvb. Gibi diğer işlevler için de aynı hatayı verir.
Ben ayırt edebilir bir fonksiyon var mıdır '(a b)ve '(a . b)?
Bağlam: özyinelemeli sürümünü uygulamak istediğimde bu sorunla karşılaştım mapcar. İşte benim uygulama
(defun true-listp (object)
"Return non-`nil' if OBJECT is a true list."
(and (listp object) (null (cdr (last object)))))
(defun recursive-mapcar (func list)
"Evaluates func on elements of the list, then on elements of elements of the list and so forth."
(let ((output nil))
(flet ((comp (a b) nil)
(call-fun-and-save (x) (add-to-list 'output (funcall func x) t 'comp))
(recursion (l)
(mapcar
(lambda (x)
(call-fun-and-save x)
(if (and (true-listp x)) ;; HERE I use true-listp, testing for list or cons is not sufficient
(recursion x)))
l)))
(recursion list))
output))
Ayrıştırılmış html tüm özel etiketleri ayıklamak için bunu kullanın. htmlAyrıştırma örneği
;; buffer 'html'
<html>
<body>
<table style="width:100%">
<tr> <td>Jill</td> <td>Smith</td> <td>50</td> </tr>
<tr> <td>Eve</td> <td>Jackson</td> <td>94</td> </tr>
</table>
</body>
</html>
Sonra bütün ayıklamak <td>olarak
(with-current-buffer (get-buffer "html")
(let ((data (libxml-parse-html-region (point-max) (point-min))))
;; gat only <td> tags
(-non-nil
(recursive-mapcar
(lambda(x) (and (consp x) (equal 'td (car x)) x))
data))
data
)
)
libxml-parse-html-regionve tüm <td>etiketleri ayıklamak istediğimde kullanışlıdır .
conspyerine.
cddr(öğe adını ve niteliklerini atlamak için). Bunu yaptıktan sonra, tüm listelerin uygun olduğunu ve probleminizin kaybolacağını bulmalısınız. Ayrıca, kodunuzdaki tdbir tdöğenin özniteliğini karıştırabileceğiniz bir hatayı da düzeltir .
true-list-pElisp'de hayır yoktur , çünkü bunu sağlamak için yeterince yararlı bulunmamıştır. Gerçekten, bir listenin uygun olup olmadığını en son test etmek istediğimi hatırlamıyorum, belki de kullanım durumunuz hakkında bize biraz daha bilgi verirseniz, sorununuzu başka bir şekilde çözmenize yardımcı olabiliriz.