Executable library: Difference between revisions
m
→{{header|Wren}}: Minor tidy
m (→{{header|Pascal}}: more correct code in the library) |
m (→{{header|Wren}}: Minor tidy) |
||
(3 intermediate revisions by 3 users not shown) | |||
Line 756:
This is the executable library:
<syntaxhighlight lang="j">
hailseq=: -:`(1 3&p.)@.(2&|) ^:(1 ~: ]) ^:a:"0
9!:29]1
9!:27'main 0'
Line 1,378 ⟶ 1,379:
Hailstone.Count := 0;
Hailstone.Data := nil;
if (aValue <> 0) and (aValue <= 200000) then begin
Buffer[0] := aValue;
I := 1;
Line 2,137 ⟶ 2,138:
while (n > 1) {
take(n)
n = (n.is_even ? (n/2) : (take(3*n + 1)/2))
}
take(1)
}
}
if (__FILE__ == __MAIN__) { # true when not imported
var seq = hailstone(27)
say "hailstone(27) - #{seq.len} elements: #{seq.
var n = 0
var max = 0
Line 2,156 ⟶ 2,157:
}
}
say "Longest sequence is for #{n}: #{max}"
}</syntaxhighlight>
Line 2,235 ⟶ 2,236:
The strategy here is check whether the main module is the same as the library module and to treat is as executable if it is but as a library otherwise.
<syntaxhighlight lang="
var Hailstone = Fn.new { |n|
Line 2,271 ⟶ 2,272:
// Check if it's being used as a library or not.
import "os" for Process
if (Process.allArguments[1] == "
libMain_.call()
}</syntaxhighlight>
Line 2,278 ⟶ 2,279:
If we run this directly, we get the expected output:
<pre>
$ wren
For the Hailstone sequence starting with n = 27:
Line 2,291 ⟶ 2,292:
If we now create a second module which imports the above and calls its Hailstone function:
<syntaxhighlight lang="
import "./
var freq = {}
Line 2,315 ⟶ 2,316:
We can now run this to check that the executable code in hailstone.wren has been suppressed, giving us:
<pre>
$ wren
The Hailstone length returned most is 72, which occurs 1467 times.
|