ডোজাকের মধ্যে এবং ক্লোজুরেতে পার্থক্য


105

ডোজাক এবং ক্লোজুরে এর মধ্যে পার্থক্য কী? আপনি যখন একে অপরের উপরে ব্যবহার করতে চান তখন এর কয়েকটি উদাহরণ কী?

উত্তর:


167

পার্থক্যটি হ'ল forঅলস ক্রমটি তৈরি করে এবং doseqপার্শ্ব-প্রতিক্রিয়া সম্পাদন করার জন্য এবং শূন্য করার জন্য শূন্য করে returns

user=> (for [x [1 2 3]] (+ x 5))
(6 7 8)
user=> (doseq [x [1 2 3]] (+ x 5))
nil
user=> (doseq [x [1 2 3]] (println x))
1
2
3
nil

আপনি যদি অন্যান্য সিকোয়েন্সের উপর ভিত্তি করে একটি নতুন সিকোয়েন্স তৈরি করতে চান তবে এর জন্য ব্যবহার করুন। আপনি যদি কিছু সিকোয়েন্সের উপাদানগুলির উপর ভিত্তি করে পার্শ্ব-প্রতিক্রিয়াগুলি (মুদ্রণ, কোনও ডাটাবেজে লিখন, পারমাণবিক ওয়ারহেড প্রবর্তন ইত্যাদি) করতে চান তবে ডোজকি ব্যবহার করুন।


11
এখন যা অনেকগুলি পার্শ্ব প্রতিক্রিয়া ... একটি পারমাণবিক ওয়ারহেড চালু করছে :)
মার্ক

6
ধন্যবাদ! আমি আমার (দীর্ঘকালীন) চুলগুলিকে "জন্য" টানছিলাম যে এটি আমার আইটেমের তালিকার উপরে আমার পারমাণবিক যুদ্ধের আগুনকে কখনই আগুনে ধরিয়ে দেয়। "ডোজক" নিশ্চিত হয়ে গেছে।
ইউ শেন

পার্থক্য রাখার এটি দুর্দান্ত উপায়।
জস্কুলস্কি

60

অলস doseqথাকা অবস্থায় forএটি আগ্রহী নোটটিও নোট করুন । রায়নের উত্তরের উদাহরণ নিখোঁজ

(for [x [1 2 3]] (println x))

আরপিএলে, এটি সাধারণত আপনি যা চান তা করবে তবে এটি মূলত একটি কাকতালীয়: forআরপিএল প্রযোজিত অলস ক্রমটি প্রেরণ করে , যার ফলে প্রিন্টলানগুলি ঘটায়। একটি ইন্টারেক্টিভ পরিবেশে, কিছুই কখনও মুদ্রণ করা হবে না। ফলাফলগুলির সাথে তুলনা করে আপনি এটিকে ক্রিয়াতে দেখতে পাচ্ছেন

user> (def lazy (for [x [1 2 3]] (println 'lazy x)))
#'user/lazy

user> (def eager (doseq [x [1 2 3]] (println 'eager x)))
eager 1
eager 2
eager 3
#'user/eager

যেহেতু defফর্মটি নতুনভাবে তৈরি নতুন ভেরিটি দেয়, এবং এটির সাথে আবদ্ধ মানটি নয়, তবে আরপিএল প্রিন্ট করার মতো কিছুই নেই এবং অবাস্তবিক lazyঅলস-সিকাকে উল্লেখ করবে: এর কোনও উপাদানই মোটেই গণনা করা হয়নি। eagerউল্লেখ করা হবে nil, এবং এর সমস্ত মুদ্রণ শেষ হয়ে গেছে।


অসীম অলস ক্রমের মূল্যায়ন কীভাবে ডোজক হ্যান্ডেল করে? খারাপ ধারণা? কেবলমাত্র সীমাবদ্ধ ক্রিয়াকলাপেই কল করুন, হয় আগ্রহী বা অলস?
জনবেকারস 25'14

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