Define a primitive data type: Difference between revisions

→‎{{header|J}}: prior version could have been tricked by clever complex number such as 2ad113. Error messages improved.
(→‎{{header|J}}: prior version could have been tricked by clever complex number such as 2ad113. Error messages improved.)
Line 1,168:
J excels in composition rather than permitting verb overloading. Express a dyadic operation as verb__object1 object2 rather than object1 verb object2 . The example uses the verb ''add'' . The constructor, create, retains j's array data structure opposed to limiting to an atom.
<lang J>
NB. z locale by default on path.
NB. le provides total ordering to control the error when non-numeric types are arguments
type_z_=: 3!:0
le_z_=: 0 1-:"1 /:@(,&<"0)
 
NB. used to ensure the object has the value field, again, to control errors.
nameClass_z_=: 4!:0
signalError_z_=: 13!:8
 
 
NB. create a restricted object from an appropriate integer
create_restrict_ =: monad define
'ValueDomain error.: expected integer' onassert [1,10]' assert4 0 -.@e.~ ,type (1y 0 -:NB. 1or 11 le ])&> yBoolean
'ValueDomain error,: nonnot integralon [1,10]' assert (0 -.@:e. [: , (0&<*.<&11)) y
value=: <. y
)
 
NB. return a new restrict object as the sum of two restrict-like objects
add_restrict_=: monad define
if. 0 = nameClass<'value__y' do.
(value + value__y) conew 0 {:: coname''
else.
'value unavailable'signalError 21
Line 1,199 ⟶ 1,195:
4 5 6
 
B =: 12 4 conew 'restrict'
 
C=: add__Aadd__B BA
value__C
2 3 4 5
8 9 10
 
D=:add__C 1 conew'restrict'
|Domain error: not on [1,10]: assert
add__D C
|Value error. expected integer'Domain error: not on [1,10]:' assert(0-.@:e.[:,(0&<*.<&11))y
 
| 'Value error. expected integer on [1,10]' assert 0-.@e.,(1 0-:1 11 le])&>y
(s:' symbol')conew'restrict'
|Domain error: expected integer: assert
| 'ValueDomain error.: expected integer on [1,10]' assert 0-.@e.,(1 0-:14 11e.~type le])&>y
</pre>
 
Anonymous user