8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/rpl/words/operations-complexes.rb', line 8
def populate_dictionary
super
category = 'Operations on complexes'
@dictionary.add_word!( ['re'],
category,
'( c -- n ) complex real part',
proc do
args = ( [[RplComplex]] )
@stack << RplNumeric.new( args[0].value.real )
end )
@dictionary.add_word!( ['im'],
category,
'( c -- n ) complex imaginary part',
proc do
args = ( [[RplComplex]] )
@stack << RplNumeric.new( args[0].value.imaginary )
end )
@dictionary.add_word!( ['conj'],
category,
'( c -- c ) complex conjugate',
proc do
args = ( [[RplComplex]] )
@stack << RplComplex.new( args[0].value.conjugate )
end )
@dictionary.add_word!( ['arg'],
category,
'( c -- n ) complex argument in radians',
proc do
args = ( [[RplComplex]] )
@stack << RplNumeric.new( args[0].value.arg )
end )
@dictionary.add_word!( ['c→r', 'c->r'],
category,
'( c -- n n ) transform a complex in 2 reals',
Types.new_object( RplProgram, '« dup re swap im »' ) )
@dictionary.add_word!( ['r→c', 'r->c'],
category,
'( n n -- c ) transform 2 reals in a complex',
proc do
args = ( [[RplNumeric], [RplNumeric]] )
complex_as_string = "(#{args[1].value}#{args[0].value.positive? ? '+' : ''}#{args[0].value}i)"
@stack << RplComplex.new( complex_as_string )
end )
end
|