পাইথনে আমার নিম্নরূপ অনুশীলন আছে:
বহুবর্ষটি গুণফলগুলির একটি দ্বিগুণ হিসাবে দেওয়া হয় যাতে শক্তিগুলি সূচকগুলি দ্বারা নির্ধারিত হয়, যেমন: (9,7,5) মানে 9 + 7 * x + 5 * x ^ 2
প্রদত্ত এক্স এর মান গণনা করতে একটি ফাংশন লিখুন
যেহেতু আমি ইদানীং ক্রিয়ামূলক প্রোগ্রামিংয়ে আছি, তাই আমি লিখেছি
def evaluate1(poly, x):
coeff = 0
power = 1
return reduce(lambda accu,pair : accu + pair[coeff] * x**pair[power],
map(lambda x,y:(x,y), poly, range(len(poly))),
0)
যা আমি অপঠনযোগ্য বলে মনে করি, তাই আমি লিখেছিলাম
def evaluate2(poly, x):
power = 0
result = 1
return reduce(lambda accu,coeff : (accu[power]+1, accu[result] + coeff * x**accu[power]),
poly,
(0,0)
)[result]
যা কমপক্ষে অপঠনযোগ্য তাই আমি লিখেছি
def evaluate3(poly, x):
return poly[0]+x*evaluate(poly[1:],x) if len(poly)>0 else 0
যা কম দক্ষ হতে পারে (সম্পাদনা করুন: আমি ভুল ছিলাম!) যেহেতু এটি ক্ষয়ক্ষতির পরিবর্তে বহু গুণ ব্যবহার করে, নীতিগতভাবে, আমি এখানে পরিমাপের বিষয়ে চিন্তা করি না (সম্পাদনা করুন: আমার কত নির্বোধ! পরিমাপ করা আমার ভুল ধারণাটি চিহ্নিত করেছিল!) এবং এখনও পুনরাবৃত্ত সমাধান হিসাবে পঠনযোগ্য (তর্কযোগ্যভাবে) না:
def evaluate4(poly, x):
result = 0
for i in range(0,len(poly)):
result += poly[i] * x**i
return result
অপরিহার্য হিসাবে পাঠযোগ্য এবং দক্ষতার সাথে এটির কাছাকাছি কোনও বিশুদ্ধ-কার্যকরী সমাধান রয়েছে কি?
স্বীকার করা, একটি প্রতিনিধিত্বমূলক পরিবর্তন সাহায্য করবে, কিন্তু এটি অনুশীলন দ্বারা দেওয়া হয়েছিল।
হাস্কেল বা লিস্প পাশাপাশি হতে পারে, কেবল পাইথন নয়।
lambda
হালকা বেনামি সিনট্যাক্স ফাংশনটির সাথে ভাষার তুলনা করার সময় পাইথন কৃপণভাবে কুৎসিত হয়। এর একটি অংশ সম্ভবত "অপরিষ্কার" চেহারাতে অবদান রাখে।
for
লুপগুলি ব্যবহার না করে বোঝায় , উদাহরণস্বরূপ) পাইথনের লক্ষ্য নির্ধারণ করা একটি খারাপ লক্ষ্য। পরিবর্তনশীলগুলিকে বিচারযোগ্যভাবে পুনরায় বাঁধাই করা এবং অবজেক্টগুলি পরিবর্তিত না করা আপনাকে প্রায় সমস্ত সুবিধা দেয় এবং কোড অসীমভাবে আরও পঠনযোগ্য করে তোলে। যেহেতু সংখ্যার অবজেক্টগুলি অপরিবর্তনীয় এবং এটি কেবল দুটি স্থানীয় নাম পুনরায় প্রত্যাবর্তন করে, আপনার "অপরিহার্য" সমাধানটি কোনও "কঠোরভাবে বিশুদ্ধ" পাইথন কোডের চেয়ে কার্যকরী প্রোগ্রামিংয়ের গুণাবলীকে আরও ভালভাবে উপলব্ধি করে।