我試圖生成一個很好的語法來映射關聯列表的值的函數,即我想寫[x ↦ f y | (x ↦ y) ∈ l]
爲mapAList f l
。我想出了自定義Isabelle語法打破現有語法
syntax
"_alist_map" :: "['b, pttrn, ('a × 'b) list] ⇒ ('a × 'b) list"
("[x ↦ _ | '(x ↦ _') ∈ _]")
它的工作原理,但會導致term "(x,y)#[]"
告訴我Inner syntax error at "(x , y) # []"
和(x
的陰影略有不同。
原因似乎一旦x
出現在mixfix註釋,它現在總是字面令牌到語法(一個定界符根據ISAR-REF的第7.4.1節),並不再的標識符 - 就像if ... then ... else ...
的語法可防止if
成爲變量名稱
我可以以某種方式解決此問題嗎?
只是出於好奇,'mapAList'是否只將'f'映射到'l'的* values *(即對的第二個分量)?看起來,類型化的語法比編寫函數應用程序更麻煩;)您是否有一個可讀性實際提高的示例(我知道這是非常主觀的)。 – chris
我的應用程序中的函數'f'是用特殊的sytnax本身編寫的,即'[| x |]'和'map(λx。[| x |])'不如'[x↦[| y |] | (x↦y)∈l]' –