آزمون کلک‌مرغابی

آزمون کلک‌مرغابی نمونه‌ای از استدلال استقرایی است با این بیان که: «اگر چیزی شبیه مرغابی به نظر می‌رسد، مانند مرغابی شنا می‌کند و صدای مرغابی درمی‌آورد، آن چیز احتمالاً مرغابی است»

این آزمون در مواردی به کار می‌رود که بتوان شی نامعلومی را به وسیلهٔ علایم ذاتی آن شناسایی کرد. همچنین جزء مباحثات بغرنج دربارهٔ اینکه هر چیزی الزاماً آن‌طور که به نظر می‌رسد نیست نیز به‌شمار می‌رود.

از این منطق در برنامه سازی کامپیوتر نیز، در زبان‌هایی مانند پایتون و روبی استفاده می‌شود که به آن نوع یابی مرغابی می‌گویند.

تاریخچه 
شاعر اهل ایندیانا جیمز ویتکام رایلی (۱۸۴۹–۱۹۱۶) احتمالاً با کلمات بازی کرده زمانی که نوشته‌است:
زمانی که پرنده‌ای را می‌بینم که مثل اردک راه می‌رود، مثل اردک شنا می‌کند و مثل اردک کواک کواک می‌کند، من این پرنده را اردک می‌نامم.

جمله‌بندی رایج‌تر عبارت احتمالاً مدت‌ها بعد توسط امیل میزی، خزامه دار کارگران متحد خودرو، در یک گردهمایی کار در ۱۹۴۶، زمانی که او فردی را به کمونیست بودن متهم کرد، به وجود آمد.

من نمی‌توانم اثبات کنم که شما کمونیست هستید اما زمانی که پرنده‌ای را می‌بینم که مثل اردک کواک کواک می‌کند، مثل اردک راه می‌رود، مثل اردک شنا می‌کند، پر و پاهای پرده‌دار دارد و با اردک‌ها رفت‌وآمد می‌کند، من قطعاً فرض می‌کنم که این پرنده اردک است.

عبارت بعداً توسط ریچارد کانینگام پترسن، سفیر ایالات متحده در گواتمالا، طی جنگ سرد رواج پیدا کرد. زمانی که او این عبارت را برای متهم کردن دولت جاکوب آربنز گازمن  به کمونیست بودن استفاده کرد. پترسون دلیل خود را به این شکل ارائه کرد:

فرض کنید پرنده‌ای را در حال راه رفتن در حیاط یک مدرسه ببینید. این پرنده هیج نشانه‌ای ندارد که بگوید یک مرغابی است. اما پرنده به‌طور قطع شبیه مرغابی است. او درون برکه می‌رود و شما متوجه می‌شوید که او مثل مرغابی شنا می‌کند. سپس منقارش را باز می‌کند و مثل یک مرغابی کواک کواک می‌کند. این‌بار شما یقیناً یه این نتیجه می‌رسید که این پرنده یک مرغابی است، چه برچسبی داشته باشد یا نه.

مرجع بعدی آزمون مرغابی کاردینال ریچارد کوشینگ است که از این عبارت در سال ۱۹۶۴ در اشاره به فیدل کاسترو استفاده کرد.

داگلاس آدامز از این عبارت در کتاب خود، آژانس جامع کارآگاهی دریک جتنلی تقلید کرده‌است.

اگر مثل اردک باشد و مثل اردک کواک کواک کند، ما باید حداقل احتمال دهیم که یک پرنده کوچک آبزی از خانواده اردک‌ها داریم.

نوع‌یابی مرغابی 
در برنامه‌نویسی کامپیوتر، برای اطمینان از نوع یک متغیر از نوع‌یابی مرغابی استفاده می‌شود. این مستلزم آن است که کنترل نوع متغیر به زمان اجرا به تعویق بیفتد و با استفاده از نوع‌یابی پویا یا بازتابی اجرا شود.

هدف نوع‌یابی مرغابی این است که مناسب بودن نوع متغیر را برای استفاده در جای مشخص، به وسیله روش‌های خاص تعیین کند. اما در نوع‌یابی عادی، مناسب بودن فقط با نوع شیٔ مشخص می‌شود.

نمونهٔ مفهومی 
شبه‌کد زیر را در نظر بگیرید:

 function calculate(a, b, c) => return (a + b) * c

 example1 = calculate (1, 2, 3)
 example2 = calculate ([1], [2, 3], 2)
 example3 = calculate ('apples ', 'and oranges, ', 3)

 print to_string example1
 print to_string example2
 print to_string example3

در مثال بالا، متغیرها می‌توانند از هر نوعی باشند و تا زمانی که توابع "+" و "*" برای آن شیٔ‌ها معنادار باشد مشکلی پیش نخواهد آمد. خروجی چنین کدی در زبان پایتون با روبی به شکل زیر خواهد بود:

 9
 [1, 2, 3, 1, 2, 3]
 apples and oranges, apples and oranges, apples and oranges,

نوع‌یابی مرغابی می‌توانند مثل چندریختی کار کند، اما بدون وراثت. تنها محدودیتی که تابع calculate اعمال می‌کند این است که ورودی‌ها اعمال "+" و "*" را پیاده‌سازی کنند.

منابع 

استعاره از پرندگان
اصطلاح‌ها در زبان انگلیسی
تیغ‌های فلسفی
مفاهیم معرفت‌شناسی
مقاله‌های دارای ویدئو
ویکی‌سازی رباتیک