অ্

অ্যারে মধ্যে Common Lisp

6টি অনুশীলনী

অ্যারে সম্পর্কে

অন্য ভাষাগুলোর মতোই Common Lisp-এ একটি অ্যারে হলো এলিমেন্টের একটি সমষ্টি, যেগুলো পূর্ণসংখ্যা ইনডেক্সের মাধ্যমে অ্যাক্সেস করা হয়। এলিমেন্টগুলোর টাইপ ভিন্ন ভিন্ন হতে পারে। অ্যারেটি বহুমাত্রিক হতে পারে (শুধু একমাত্রিক নয়)।

তৈরি করা

make-array দিয়ে অ্যারে তৈরি করা যায়। এতে অনেক অপশন আছে, তবে এর সহজ রূপগুলো দিয়ে N-মাত্রিক অ্যারে তৈরি করা যায়, যেখানে হয় সব এলিমেন্ট একটি একক মান দিয়ে ইনিশিয়ালাইজ করা হয়, নয়তো অ্যারেটি অন্য একটি সিকোয়েন্সের (যেমন একটি লিস্টের) মান দিয়ে ইনিশিয়ালাইজ করা হয়। এর প্রথম আর্গুমেন্টটি প্রতিটি মাত্রার আকারের একটি লিস্ট।

(make-array '(4) :initial-element 3)    ; => #(3 3 3 3)
(make-array '(2 2) :initial-element 'x) ; => #2A((X X) (X X))
(make-array '(3 3 3) 
  :initial-contents '(((a b c) (d e f) (g h i)) 
                      ((j k l) (m n o) (p q r)) 
                      ((s t u) (v w x) (y z &))))
                                        ; => #3A(((A B C) (D E F) (G H I))
                                                 ((J K L) (M N O) (P Q R))
                                                 ((S T U) (V W X) (Y Z &)))

(লক্ষ্য করুন, N-মাত্রিক অ্যারেগুলো প্রিন্ট করার সময় মাত্রার সংখ্যাটিও দেখানো হয়।)

যে ফরম্যাটে অ্যারেগুলো প্রিন্ট হয়, সেই একই ফরম্যাট ব্যবহার করেও অ্যারে তৈরি করা যায়:

#(x y z)         ; => #(X Y Z)
#2A((1 2) (3 4)) ; => #2A((1 2) (3 4))

এলিমেন্ট অ্যাক্সেস করা

ভেক্টরের এলিমেন্ট অ্যাক্সেস করতে aref ব্যবহার করুন; ইনডেক্সগুলো শূন্য-ভিত্তিক। যতগুলো ইনডেক্স দেওয়া হবে, তা অ্যারের র‍্যাঙ্কের সাথে মিলতে হবে।

(aref #2A((1 2 3) (3 4 5)) 1 0) ; => 3
(aref #3A(((a b) (c d)) 
          ((e f) (g h)) 
          ((t u) (v w))) 
      2 0 1)                    ; => U
(aref #2A((1) (2)) 0)           ; => ERROR (because not enough indexes provided)

এছাড়া দেওয়া ইনডেক্সগুলো অ্যারে তৈরির সময় নির্ধারিত মাত্রাগুলোর সীমার মধ্যে থাকতে হবে। এটি array-in-bounds-p দিয়ে যাচাই করা যায়:

(array-in-bounds-p #2A((1) (2)) 0 0) ; => T
(array-in-bounds-p #2A((1) (2)) 2 0) ; => NIL

row-major-aref দিয়েও একটি এলিমেন্ট অ্যাক্সেস করা যায়, যা একটি একক পূর্ণসংখ্যা নেয় এবং সারি-প্রধান ক্রমে এলিমেন্টটি নির্দিষ্ট করে। (ইনডেক্সগুলো থেকে array-row-major-index দিয়ে সারি-প্রধান ইনডেক্সটি হিসাব করা যায়।)

(array-row-major-index #2A((1 2 3) (4 5 6)) 1 1 ) ; => 4
(row-major-aref #2A((1 2 3) (4 5 6)) 4)           ; => 5

প্রেডিকেট

কোনো অবজেক্ট অ্যারে কি না তা নির্ণয় করতে arrayp ব্যবহার করা যায়।

(arrayp #(1 2 3))            ; => T
(arrayp #2((1 2 3) (4 5 6))) ; => T
(arrayp (list 1 2 3))        ; => NIL

অ্যারে সম্পর্কে জিজ্ঞাসা

অ্যারে সম্পর্কে নানা তথ্য নিচের ফাংশনগুলোর মাধ্যমে পাওয়া যায়:

  • array-rank দিয়ে অ্যারের মাত্রার সংখ্যা পাওয়া যায় (একে অ্যারের র‍্যাঙ্ক বলা হয়)।
  • array-dimensions দিয়ে অ্যারের মাত্রাগুলোর আকারের একটি লিস্ট পাওয়া যায়।
  • array-dimension দিয়ে কোনো একটি মাত্রার আকার পাওয়া যায়।
  • array-total-size দিয়ে অ্যারের মোট এলিমেন্ট সংখ্যা পাওয়া যায়।
(let ((array #3A(((0 1) (2 3) (4 5)) 
                 ((6 7) (8 9) (A B)) 
                 ((C D) (E F) (G H))
                 ((I J) (K L) (M N)))))
  (list (array-rank array)
        (array-dimensions array)
        (array-dimension array 1)
        (array-total-size array))) ; => (3 (4 3 2) 2 24)

অ্যারের আকারের সীমা

Common Lisp স্ট্যান্ডার্ড অ্যারের সর্বোচ্চ আকারের উপর কিছু সীমা নির্ধারণ করে। এই সীমাগুলো কিছু নির্ধারিত কনস্ট্যান্টে পাওয়া যায়:

  • array-rank-limit: অ্যারের সর্বোচ্চ অনুমোদিত মাত্রার সংখ্যা (যা ৮-এর কম নয় বলে নির্ধারিত)।
  • array-dimension-limit: যেকোনো একটি মাত্রার সর্বোচ্চ আকার (যা ১০২৪-এর কম নয় বলে নির্ধারিত)।
  • array-total-size-limit: যেকোনো অ্যারের সর্বোচ্চ এলিমেন্ট সংখ্যা (যা ১০২৪-এর কম নয় বলে নির্ধারিত)।
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

অ্যারে শিখুন

অনুশীলন লক করা আছে

অ্যারে অনুশীলন করতে আরও 5টি অনুশীলনী আনলক করুন