هل هناك اسم موحد لهذه الوظيفة؟
-
20-09-2019 - |
سؤال
وماذا كنت تسمية دالة التي تأخذ قائمة وظيفة، والعودة الحقيقية إذا تطبيق وظيفة لجميع عناصر يعطي نفس النتيجة؟
def identical_results(l, func):
if len(l) <= 1: return True
result = func(l[0])
for el in l[1:]:
if func(el) != result:
return False
return True
هل هناك لطيفة المتعارف عليها اسم لهذا الشيء؟ مكافأة إذا يمكنك تنفيذ بطريقة أقل عالي الكعب.
المحلول
في .NET، الأقرب هو Array.TrueForAll
.
وربما SameForAll
سيكون أكثر ملاءمة لهذه الوظيفة؟
نصائح أخرى
وHavn't سمعت عن اسم خاص لهذا بعد (تشبه إلى حد ما Forall
، ولكن ليس تماما). IdenticalResults
يبدو ذلك بخير (مقترح جون الشركات Seigel SameForAll
، أيضا لطيف جدا)
وبالإضافة إلى ذلك: هذا هو حال يمكن للمرء أن تنفيذ هذا في هاسكل باستخدام وظيفة all
(TrueForall
تحت .NET)
ident [] = True
ident (x:xs) = all (== x) xs
sameForAll f = ident . map f
وبيثون:
def idents(f, list):
if len(list) <= 1:
return True
else:
let fx0 = f(list[0])
return all(( f(x) == fx0 for x in list[1:] ))
لا يمكن التفكير في اسم جيدة حتى الآن، ولكن هذا لا نفس:
def identical_results(l, func):
return len(set(map(func, l))) <= 1
وidentical_results الأصوات مثل اسم معقول بالنسبة لي.
ونشرت لي هذا في تعليق أعلاه، ولكن التنسيق حصلت عابث، حتى هنا هو مرة أخرى لوضوح:
def identical_results(l, func):
return reduce(lamdba x,y: x and y, map(func, l))