ক্লোজুরে কোর বা কন্ট্রিবিজে জিপ ফাংশনের সমতুল্য কি আছে?


130

ক্লোজুরে, আমি দুটি তালিকাগুলি একত্রিত করে জোড়ার একটি তালিকা দিতে চাই,

> (zip '(1 2 3) '(4 5 6))  
((1 4) (2 5) (3 6))

হাস্কেল বা রুবিতে ফাংশনটিকে জিপ বলা হয় । এটি বাস্তবায়ন করা কঠিন নয়, তবে আমি নিশ্চিত করতে চেয়েছিলাম যে আমি কোর বা অবদানের কোনও ফাংশন অনুপস্থিত।

কোরে একটি জিপ নেমস্পেস রয়েছে, তবে এটি জিপার ফাংশনাল কৌশলটিতে অ্যাক্সেস সরবরাহ হিসাবে বর্ণনা করা হয়েছে, যা আমি পরে যা তা উপস্থিত হয় না বলে মনে হয়।

2 বা ততোধিক তালিকাগুলির সংমিশ্রণের জন্য কি কোরে সমতুল্য কাজ রয়েছে?

যদি তা না থাকে, তবে এটি এমন কি কারণ কোনও অহংকারিক পদ্ধতি রয়েছে যা ফাংশনটি বিনা শৃঙ্খলাবদ্ধ করে?


zipটুপেলো লাইব্রেরিতে একটি ফাংশন রয়েছে: Cloojure.github.io/doc/tupelo/tupelo.core.html#var-zip
অ্যালান থম্পসন

উত্তর:


220
(map vector '(1 2 3) '(4 5 6))

আপনি যা চান তা করে:

=> ([1 4] [2 5] [3 6])

হাস্কেলের জন্য zipWith( zipWith3,, zipWith4...) ফাংশনগুলির সংগ্রহ প্রয়োজন, কারণ সেগুলি সমস্ত নির্দিষ্ট ধরণের হওয়া দরকার ; বিশেষত, তারা যে পরিমাণ ইনপুট তালিকার গ্রহণ করে তা সংশোধন করা দরকার needs ( zip, zip2, zip3, ... পরিবারের একজন বিশেষজ্ঞতা হিসাবে গণ্য করা যেতে পারে zipWithtupling এর সাধারণ ব্যবহার ক্ষেত্রে জন্য পরিবার)।

বিপরীতে, ক্লোজার এবং অন্যান্য লিপসের ভেরিয়েবল আরটি ফাংশনগুলির জন্য ভাল সমর্থন রয়েছে; mapএগুলির মধ্যে একটি এবং "টুপলিং" এর জন্য হাস্কেলের মতো একটি পদ্ধতিতে ব্যবহার করা যেতে পারে

zipWith (\x y -> (x, y))

ক্লোজুরে "টিউপল" তৈরির বুদ্ধিদীপ্ত উপায়টি হ'ল উপরের মতো বর্ণিত একটি ছোট ভেক্টর তৈরি করা।

(কেবলমাত্র সম্পূর্ণতার জন্য, লক্ষ্য করুন যে কিছু বেসিক এক্সটেনশন সহ হাস্কেল ভেরিয়েবল আরটি ফাংশনগুলিকে মঞ্জুরি দেয়; যদিও তাদের ব্যবহার করে ভাষার একটি ভাল বোঝার প্রয়োজন হয়, এবং ভ্যানিলা হাস্কেল 98 সম্ভবত তাদের মোটেও সমর্থন করে না, সুতরাং স্থির অভ্যাসের কাজগুলি পছন্দনীয় স্ট্যান্ডার্ড লাইব্রেরির জন্য।)


8
দ্রষ্টব্য যে zipসংগ্রহগুলি একই দৈর্ঘ্য নয় এর চেয়ে আলাদা আচরণ করে । রুবি nilসংক্ষিপ্ত সংগ্রহের জন্য প্রসেসিং এবং সরবরাহ সরবরাহ করবে, যখন ক্লোরজুর কোনও সংগ্রহ শেষ হয়ে গেলে প্রক্রিয়া বন্ধ করবে stop
ন্যাট ডব্লিউ।

@NateW। এটি লক্ষ্য করা ভাল, ধন্যবাদ। হাস্কেল এ ক্ষেত্রে zipক্লোজারের মতো আচরণ করে map
মিশা মারকজেক

1
আমি কি ভেরিয়েবল আরটি হাস্কেল ফাংশন সম্পর্কিত রেফারেন্স চাইব?
টিওডর

22
(partition 2 (interleave '(1 2 3) '(4 5 6))) 
=> ((1 4) (2 5) (3 6))

বা আরও সাধারণভাবে

(defn zip [& colls]
  (partition (count colls) (apply interleave colls)))

(zip '( 1 2 3) '(4 5 6))           ;=> ((1 4) (2 5) (3 6))

(zip '( 1 2 3) '(4 5 6) '(2 4 8))  ;=> ((1 4 2) (2 5 4) (3 6 8))


11

আপনি যা চেয়েছিলেন ঠিক তা দিতে, listদুটি তালিকার মধ্যে ম্যাপিং আপনাকে উদাহরণের মতো তালিকার একটি তালিকা দেবে give আমি মনে করি যে অনেক ক্লুজুরিয়ান এটির জন্য ভেক্টর ব্যবহার করার ঝোঁক রাখবে যদিও এটি কোনও কিছুর সাথেই কাজ করবে। এবং ইনপুটগুলি একই ধরণের হওয়ার দরকার নেই। মানচিত্রগুলি তাদের থেকে সেকস তৈরি করে এবং তারপরে সিকগুলি মানচিত্র তৈরি করে যাতে কোনও সিক্য্যাবল ইনপুট ঠিকঠাক কাজ করবে।

(map list '(1 2 3) '(4 5 6))
(map list  [1 2 3] '(4 5 6))
(map hash-map  '(1 2 3) '(4 5 6))
(map hash-set  '(1 2 3) '(4 5 6))

1
আমি মনে করি আপনার অর্থ হ্যাশ-মানচিত্র এবং মানচিত্র এবং সেটের পরিবর্তে হ্যাশ-সেট।
গ্রাড

3

অন্তর্নির্মিতভাবে কেবল ফাংশন হবে 'ইন্টারলিভ':

(interleave [1 2 3 4] [5 6 7 8]) => [1 5 2 6 3 7 4 8]

6
(partition 2 (interleave [1 2 3 4][5 6 7 8]))
ওপির

হ্যাঁ - দেখা যাচ্ছে আমি অপের পছন্দসই আউটপুটটি খুব কাছ থেকে দেখিনি।
lsh

-1

জিপম্যাপ নামে একটি ফাংশন রয়েছে যা এর একই রকম প্রভাব ফেলতে পারে (জিপম্যাপ (1 2 3)(4 5 6%)) আউটপুটটি নিম্নরূপ হিসাবে রয়েছে: {3 6, 2 5, 1 4}


জিপম্যাপ আপনাকে একটি মানচিত্র ফেরত দেয় যা আদেশের গ্যারান্টি দেয় না
ইলিয়া শিংকারেঙ্কো

-2

# (মানচিত্রের তালিকার% প্রয়োগ করুন) পাইথন জিপ * ফাংশনের মতো একটি ম্যাট্রিক্স স্থানান্তর করে। ম্যাক্রো সংজ্ঞা হিসাবে:

ব্যবহারকারী => (Defmacro পাই-জিপ [lst] `(মানচিত্রের তালিকা প্রয়োগ করুন ~ lst))

# 'ব্যবহারকারী / PY-জিপ

ব্যবহারকারী => (পাই-জিপ '((1 2 3 4) (9 9 9 9) (5 6 7 8)))

((1 9 5) (2 9 6) (3 9 7) (4 9 8%)

ব্যবহারকারী => (পাই-জিপ '((1 9 5) (2 9 6) (3 9 7) (4 9 8)))

((1 2 3 4) (9 9 9 9) (5 6 7 8))


এটি 'মানচিত্র' ব্যবহারের চেয়ে কীভাবে ভাল? এবং এখানে একটি ম্যাক্রো এর বিন্দু কি?
ডেভ নিউটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.