在關於插入到博朗樹(第118頁)的章節中,作者對代碼應該做什麼做了一些解釋,但是將其留在一邊,本書中的一個明顯ommision並不是解釋函數模式匹配中用於定理證明的奇怪語法。如何讀取Braun樹插入的語法?
據我所知,with pattern可以通過使用|
進一步解構和我可以理解,使用時rewrite
,|
也可以用來分離不同的重寫,但是這使得它混亂。
據我所知,重寫絕對不是一個函數。然後出現以下內容:
bt-insert a (bt-node{n}{m} a' l r p)
rewrite +comm n m with p | if a <A a' then (a , a') else (a' , a)
bt-insert a (bt-node{n}{m} a' l r _) | inj₁ p | (a1 , a2)
rewrite p = (bt-node a1 (bt-insert a2 r) l (inj₂ refl))
bt-insert a (bt-node{n}{m} a' l r _) | inj₂ p | (a1 , a2) =
(bt-node a1 (bt-insert a2 r) l (inj₁ (sym p)))
我真的很困惑,應該如何精神分析rewrite +comm n m with p | if a <A a' then (a , a') else (a' , a)
。一個人如何閱讀| inj₁ p | (a1 , a2) rewrite p
?另外,在測試前面的例子時,我發現由於某種原因,重寫的順序並不重要。這是爲什麼?