উত্তর:
ব্যবহার করুন cl-map
, পরিবর্তে:
(cl-map 'vector #'1+ [1 2 3 4])
একটু অতিরিক্ত পটভূমি: cl-map
হয় প্রচলিত পাতার মর্মর map
ফাংশন যে ক্রম প্রকারের সাধারণীকরণ:
(cl-map 'vector #'1+ '[1 2 3 4]) ;; ==> [2 3 4 5]
(cl-map 'list #'1+ '(1 2 3 4)) ;; ==> (2 3 4 5)
(cl-map 'string #'upcase "abc") ;; ==> "ABC"
এটি সিকোয়েন্স প্রকারের মধ্যে রূপান্তর করতে পারে (যেমন, এখানে, ইনপুটটি একটি তালিকা এবং আউটপুটটি একটি ভেক্টর):
(cl-map 'vector #'1+ '(1 2 3 4)) ;; ==> [2 3 4 5]
cl
সঞ্চিত cl-lib
লাইব্রেরির চেয়ে পুরানো লাইব্রেরির সাথে সম্পর্কিত ছিল । আমি উদাহরণস্বরূপ বলি না, আমি (defun fnx () (cl-map 'vector #'1+ '[1 2 3 4]))
এবং তারপরে কোনও সতর্কতা পাই (byte-compile 'fnx)
।
যেহেতু আমি 18 সেকেন্ডের ব্যবধানে পরাজিত হয়েছিল, তাই ক্লাব লাইব্রেরি ছাড়াই এটি করার একটি সহজ এবং নিরাপদ উপায়। এটি উপাদানগুলির মূল্যায়নও করে না।
(apply #'vector (mapcar #'1+ [1 2 3 4])) ;; => [2 3 4 5]
cl-lib
নির্ভরতা এড়ানোর বিরুদ্ধে সামান্য অসুবিধাটি বন্ধ করতে পারেন ।
apply
।
(apply #'vector ...)
যে কখনও কখনও সামান্য দ্রুত হতে পারে, তবে সম্পূর্ণতার জন্য, এটি দিয়ে প্রতিস্থাপনও করা যেতে পারে (vconcat ...)
।
কেসটির জন্য এত মার্জিত ইনস্প্লেস-ভেরিয়েন্ট নয় যে এর পরে মূল ভেক্টরটির আর প্রয়োজন হয় না এবং মেমরির বরাদ্দ সময়-সমালোচনা (যেমন ভেক্টরটি বড়)।
(setq x [1 2 3 4])
(cl-loop for var across-ref x do
(setf var (1+ var)))
ফলাফল সংরক্ষণ করা হয় x
। আপনার যদি ফর্মটি x
শেষে ফিরে আসতে হয় তবে আপনি finally return x
নীচের হিসাবে যুক্ত করতে পারেন :
(cl-loop for var across-ref x do
(setf var (1+ var))
finally return x)
সম্পূর্ণতার জন্য, ব্যবহার seq
:
(require 'seq)
(seq-into (seq-map #'1+ [1 2 3 4]) 'vector)
আপনি লুপ ব্যবহার করতে পারেন
(let ((v (vector 1 2 3 4)))
(dotimes (i (length v))
(aset v i (1+ (aref v i))))
v)
;; => [2 3 4 5]
কখনও কখনও আপনি আসল ভেক্টরটি সংশোধন করতে চান না, আপনি একটি অনুলিপি তৈরি করতে পারেন
(let* ((v0 (vector 1 2 3 4))
(v (copy-sequence v0)))
(dotimes (i (length v))
(aset v i (1+ (aref v i))))
(list v0 v))
;; => ([1 2 3 4] [2 3 4 5])
অথবা স্ক্র্যাচ থেকে একটি নতুন ভেক্টর তৈরি করুন
(let* ((v0 (vector 1 2 3 4))
(v (make-vector (length v0) nil)))
(dotimes (i (length v))
(aset v i (1+ (aref v0 i))))
(list v0 v))
;; => ([1 2 3 4] [2 3 4 5])
cl
যদিও গ্রন্থাগারগুলি সংকলক সতর্কতা দেয় না, যদিও? (বেশিরভাগ কারণে এফএসএফ অসুবিধাগ্রস্ত?)