Можно ли заблокировать OwnValues, когда DownValues ​​уже существуют?

Для случаев, когда кто-то уже назначил DownValues, связанный с именем 'a', существует ли приемлемый способ заблокировать присвоение OwnValues ​​тому же имени? (Первоначально я сталкивался с

Вот чего я хочу избежать:

Remove[a];
a[1] := somethingDelayed
a[2] = somethingImmediate;
DownValues[a]
a[1]
a[2]

Возврат ...

{HoldPattern[a[1]] :> somethingDelayed, 
 HoldPattern[a[2]] :> somethingImmediate}
somethingDelayed
somethingImmediate

А теперь, если бы мы оценили:

a = somethingThatScrewsUpHeads;
(* OwnValues[a] above stored in OwnValues *)
a[1]
a[2]

Мы получили ...

somethingThatScrewsUpHeads[1]
somethingThatScrewsUpHeads[2]

Есть ли простой / гибкий способ предотвратить OwnValues ​​для любого Name в DownValues? (Дайте предположение ... это возможно, но будет снижение производительности?)

9
задан telefunkenvf14 2 August 2011 в 19:43
поделиться