Haskell鎬庝箞鏀寔閫掑綊鏁版嵁缁撴瀯
Haskell 鏀寔閫掑綊鏁版嵁缁撴瀯锛屽叾涓渶甯歌鐨勬柟寮忔槸浣跨敤浠f暟鏁版嵁绫诲瀷銆備唬鏁版暟鎹被鍨嬪厑璁稿畾涔夎嚜宸辩殑鏁版嵁绫诲瀷锛屽叾涓彲浠ュ寘鍚瀯閫犲櫒锛岃繖浜涙瀯閫犲櫒鍙互鍖呭惈閫掑綊寮曠敤鑷韩鐨勭被鍨嬨€備緥濡傦紝涓嬮潰鏄竴涓畾涔変簩鍙夋爲鐨勪唬鏁版暟鎹被鍨嬬殑渚嬪瓙锛?/p>
data BinaryTree a = Leaf
| Node a (BinaryTree a) (BinaryTree a)
鍦ㄨ繖涓緥瀛愪腑锛?code>BinaryTree 鏄竴涓唬鏁版暟鎹被鍨嬶紝鍏朵腑鍖呭惈涓や釜鏋勯€犲櫒锛?code>Leaf 琛ㄧず绌哄彾瀛愯妭鐐癸紝Node
琛ㄧず涓€涓寘鍚€煎拰涓や釜瀛愭爲鐨勮妭鐐广€傝繖閲岀殑 BinaryTree a
鏄€掑綊瀹氫箟鐨勶紝鍥犱负 Node
鏋勯€犲櫒鐨勫弬鏁版槸 BinaryTree a
绫诲瀷銆?/p>
浣跨敤閫掑綊鏁版嵁缁撴瀯鏃讹紝浣犲彲浠ヤ娇鐢ㄩ€掑綊鍑芥暟鏉ュ鐞嗚繖浜涙暟鎹粨鏋勩€備緥濡傦紝涓嬮潰鏄竴涓绠椾簩鍙夋爲鍙跺瓙鑺傜偣鏁扮殑鍑芥暟锛?/p>
countLeaves :: BinaryTree a -> Int
countLeaves Leaf = 1
countLeaves (Node _ left right) = countLeaves left + countLeaves right
鍦ㄨ繖涓緥瀛愪腑锛?code>countLeaves 鍑芥暟閫掑綊鍦伴亶鍘嗕簩鍙夋爲锛屽鏋滈亣鍒板彾瀛愯妭鐐瑰垯杩斿洖 1锛屽惁鍒欓€掑綊鍦拌绠楀乏鍙冲瓙鏍戠殑鍙跺瓙鑺傜偣鏁板苟鐩稿姞銆?/p>
閫氳繃浠f暟鏁版嵁绫诲瀷鍜岄€掑綊鍑芥暟锛孒askell 鑳藉寰堟柟渚垮湴鏀寔閫掑綊鏁版嵁缁撴瀯鐨勫畾涔夊拰鎿嶄綔銆?/p>