Tak mám spousta více či méně blbejch otázek:
1/ proč tam musím uvádět {auto 0 prf1 : IsEven n} ?
2/ proč je to mezi šipkama? Ta funkce má jen tři parametry, ne pět.
3/ co to vlastně to {auto 0 prf1 : IsEven n} říká?
4/ proč tam ten prf1 musí být, když tam nikde nefiguruje? Proč musí být různý? prf1 a prf2
1. To jsou prerekvizity, které chceš (sudost argumentů). To "auto" znamená, že si to má překladač ověřit sám.
2. To je jen konvence, implicitní parametry můžou být kdekoliv. Ta funkce má dva parametry a dvě prerekvizity.
3.
IsEven n říká, že
n je zaručeně sudé. A
prf1/
prf2 je prostě jméno té prerekvizity.
4. Jsou různé, protože máš dva vstupní parametry, které chceš mít sudé. Být tam musí, aby sis vynutil tu sudost (kdyby se to nepředávalo, na vstupu by mohlo být libovolné číslo).
Kdybych tam cpal čísla ze vstupu, musel bych si to ověření sudosti (
prfX) vyrobit sám a předat ho explicitně.