It would help if you provided example values for
your input variables and what you expect the
output P to then be.
Just glancing at your pseudocode and your Forth
definition they don't look like the same algorithm.
Your Forth definition uses two IF statements
where your pseudocode uses one.
Further, your Forth code is missing a THEN for
one of the IFs which is probably why it did not compile..
Did you mean something like:
: pascalCorr' { g s L -- p }
3 11 g * - s + L - 30 mod \ leaves p' on stack
dup 29 = over 28 = g 11 > and or
if 1-
then ;
I used locals for simplicity and readability but left p'
on the stack.
Once it works you could easily remove the locals
and replace with variables (and @ !).
-Doug
On Sunday, October 30, 2022 at 7:33:47 AM UTC-4,
[email protected] wrote:
Sorry all, it looks like I'm having an issue I can't seem to understand my problem.
Here is what I'm trying to accomplish... it seems to work when I'm interactive, with the exception if the condition. I have some concerns on the AND condition as that might be the problem... but it fails on the last part off the definition.
\ Next we calculate an uncorrected date for the Paschal full moon, p'; then we apply a
\ minor correction to get the exact date, p, as the number of days after 21st March.
\ p' = (3 - 11g + s - l) mod 30
\ if (p' == 29) or (p' == 28 and g > 11) then
\ p = p' - 1
\ else
\ p = p'
Here is my word that fails to compile...
: _PascalCorr ( -- -- ) compiled
3 11 G @ * - S @ L @ - + 30 MOD P' ! compiled
P' @ DUP 29 = IF P ! ELSE DROP compiled
P' @ DUP 28 = AND G @ 11 > IF 1 - P ! ELSE DROP THEN compiled
P' @ P ! ;
:163: unstructured
P' @ P ! >>>;<<<
Backtrace:
$7F185F1E8988 throw
$7F185F1F84E0 c(abort")
$7F185F2055E0 def?
$7F185F1F18C0 ;-hook
Any pointers into this issue would shed some light as I seem to be missing something.
Cheers!
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)