Define a primitive data type: Difference between revisions

Line 1,167:
=={{header|J}}==
J excels in composition rather than permitting verb overloading.
<prelang J>
le_z_=: 0 1-:"1 /:@(,&<"0) NB. compare arbitrary types
nameClass_z_=: 4!:0
signalError_z_=: 13!:8
 
 
create_restrict_ =: monad define
NB. create a restricted object from an appropriate integer
create_restrict_ =: monad define
'Value error. expected integer on [1,10]' assert 1 0 -: 1 11 le y
'Value error, non integral' assert (-: <.) y
Line 1,176 ⟶ 1,180:
)
 
NB. update the value by adding an integer to it.
addAssign_restrict_=: monad def'create value + y'
 
add_restrict_=: monad define
if. 0 = nameClass<'value__y' do.
(value + value__y) conew 0 {:: coname''
else.
'value unavailable'signalError 21
end.
)
</lang>
 
<pre>
A =: 32 conew 'restrict'
 
add__A 8
|value unavailable: signalError
| 'value unavailable' signalError 21
 
A B=: 36 conew'restrict'
 
C=: add__A B
 
value__C
4r3 conew 'restrict'
8
|Value error, non integral: assert
| 'Value error, non integral' assert(-:<.)y
add__C B
'abc' conew 'restrict'
|length error: le
| 'Value error. expected integer on [1,10]'assert 1 0-:1 11 le y
'restrict'conew~s:' a' NB. symbol
|length error: le
| 'Value error. expected integer on [1,10]'assert 1 0-:1 11 le y
345 conew 'restrict'
|Value error. expected integer on [1,10]: assert
| 'Value error. expected integer on [1,10]' assert 1 0-:1 11 le y
0 conew 'restrict'
|Value error. expected integer on [1,10]: assert
| 'Value error. expected integer on [1,10]' assert 1 0-:1 11 le y
A =: 3 conew'restrict'
A =: 3 conew'restrict'
value__A
3
addAssign__A 2
5
value__A
5
addAssign__A 5
10
addAssign__A 3
|Value error. expected integer on [1,10]: assert
| 'Value error. expected integer on [1,10]' assert 1 0-:1 11 le y
Anonymous user