স্বীকৃতি নিয়ে আমি সত্যিই বিভ্রান্ত হয়ে পড়েছি .
। Is '(a . b)
একটি তালিকা?
(listp '(a . b))
ফিরে আসে t
তবে আমি যখন জানতে চাই এর দৈর্ঘ্য (length '(a . b))
একটি ত্রুটি দেয় Wrong type argument: listp, b
। অন্যান্য ফাংশনগুলির জন্য একই nth,mapcar
ইত্যাদি they তারা সবাই একই ত্রুটি দেয়
এমন কোন ফাংশন আছে যা আমি '(a b)
এবং এর মধ্যে পার্থক্য করতে পারি '(a . b)
?
প্রসঙ্গ: আমি যখন পুনরাবৃত্ত সংস্করণটির বাস্তবায়ন করতে চেয়েছিলাম তখন আমি এই সমস্যার মুখোমুখি হয়েছি mapcar
। এখানে আমার বাস্তবায়ন
(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))
আমি পার্সড এইচটিএমএল থেকে সমস্ত নির্দিষ্ট ট্যাগগুলি বের করতে এটি ব্যবহার করি। html
পার্স করার উদাহরণ
;; 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>
তারপরে আমি সমস্ত <td>
হিসাবে নিষ্কাশন
(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-region
করি এবং আমি সমস্ত <td>
ট্যাগগুলি বের করতে চাই use
consp
পরিবর্তে এটি
cddr
(উপাদানটির নাম এবং বৈশিষ্ট্যগুলি এড়াতে) পুনরাবৃত্তভাবে ম্যাপকার প্রয়োগ করা উচিত নয় । একবার আপনি এটি করেন, আপনার খুঁজে পাওয়া উচিত যে সমস্ত তালিকা যথাযথ এবং আপনার সমস্যাটি অদৃশ্য হয়ে যাবে। এটি আপনার কোডে একটি বাগও ঠিক করবে যেখানে আপনি td
কোনও td
উপাদানের জন্য কোনও বৈশিষ্ট্যকে বিভ্রান্ত করতে পারেন ।
true-list-p
এলিস্পে কেবল কোনও কারণ নেই কারণ এটি সরবরাহের জন্য এটি যথেষ্ট কার্যকর হিসাবে পাওয়া যায় নি। প্রকৃতপক্ষে, কোনও তালিকা যথাযথ ছিল কিনা তা পরীক্ষা করার জন্য আমি শেষবারের মতো মনে করতে পারছি না, তাই আপনি যদি আপনার ব্যবহারের ক্ষেত্রে আমাদের কিছুটা বেশি তথ্য দেন আমরা আপনাকে অন্যভাবে আপনার সমস্যা সমাধানে সহায়তা করতে পারি।