根本原因在于……现代汉语“可数名量词”本质 / 来源上是一种语法化的修辞(转喻为主),而修辞往往就是不太“讲道理”。(追求丰富生动,而非简明规范)
一只马,一头马,一匹马;
一只猪,一头猪;
一只狗,一头狗,一条狗;
如果只谈语法,以上八例均是合法的现代汉语用例(但加粗三例“给人的感觉不对劲”,需配合语境设计)。我下面依次解释:
- 量词“头”以含义“头部”转喻动物。修辞上偏好具有显眼头部的大型四足动物。
- 量词“只”以含义“单独”转喻一切可数物件,用作万能量词(通用性或仅次于“个”)。
但“万能量词”意味着缺乏限定 / 描述功能,使用优先级天然偏低;当目标已有惯例搭配时,使用万能量词会显得笨拙而怪异。具体到动物,“只”几乎可以适用于除智人Homo sapiens 外的所有动物[1],但由于大型动物惯例与“头”搭配,优先级更高,因此“只”搭配大型动物一般仅用于抽离性,无限定,偏学术语境的定性描述,比如:
在保护区西北部,观察到两只普氏野马(不限定年龄,性别,体型)
在保护区西北部,观察到两头普氏野马(偏向大体型成马)

不过现代汉语普通话中“马 - 匹”已经形成约定俗成的固定搭配了,所以日常应用中“只”和“头”基本没有和“马”组合的机会。关于“匹”的问题我们稍后再说。
先谈谈狗,实际上普通话中“狗”和“条”的搭配也具备“约定俗成”的强势,不过幸好还没到排他的程度,仍有选择余地。此处“只”作为万能量词略去不谈;
- 量词“条”以含义“长条”,转喻轮廓细长的物品 / 动物(蛇,鱼,绳,线),狗属于此类。
- 量词“头”搭配中小型动物(比如狗)时,一般都是为了修辞性强调个体“体型粗壮,硕大”。用例比如:
一条猎犬
一头藏獒

至此开头三例加粗用例解释完毕。
然后说说“匹”,这个词本义是大概是“匹配 / 搭配”,可用于为战车搭配左右成对的挽马(“匹马”),也可用于比照裁量一套布料(“匹布”),后又引申为名词“一对”或“一对中的一方”。不论是从战车中发展出的“成对挽马中的一方”,还是从骑术发展出的“与一人成对 / 匹配的乘马”,“匹”均可以同时强调马的工具属性和数量:
- 量词“匹”以含义“搭配 / 成对”指向或转喻乘挽马,又扩大到一切马匹乃至骆驼,驴等乘挽畜。

“马”和量词“匹”绑定得如此之深,日常中几乎不会出现其他搭配,以至于一些合法合理的组合也会让母语者感到一丝不自在(比如“一头马”)。
什么?你问为什么狼也能用量词“匹”?——这得去问某国产男装品牌(又一个修辞获胜的经典实例)
最后再解释一下为什么现代汉语里数量名短语严格要求量词,而上古汉语不需要:
- 上古汉语中,单音节词汇占绝对主流,“一”是数词,“马”是名词,“一马”构成数名短语。
- 但在汉魏以来的汉语口语中,双音节词占比不断提升,“一”和“马”均可用作词素,因此上古句法短语“一马”在时人感受中,更像是一个词汇[2]。
- 为了恢复数名短语结构,需要找一个工具把黏到一起的两个词素掰开,重构成短语。
- 一个现成的工具方案,就是拿名数名短语中后置位的转喻名词(“车一乘,马二匹”),套用不可数量词作前置修饰语(“五樽酒”)结构,直接重构出所需的数量名短语(“一匹马”)。此时量词是短语结构成立的必要条件。