gpt4 book ai didi

code-formatting - Forth 代码格式化指南

转载 作者:行者123 更新时间:2023-12-04 02:49:37 24 4
gpt4 key购买 nike

我正在尝试通过欧拉计划练习自学 Forth。我研究了几个教程,但找不到关于如何定位关键字/控制结构的权威指南。 Emacs forth-mode 似乎对代码应该如何格式化有一些想法,但我不太相信我所看到的:) 所以,例如,下面的代码:

: euler1
0 1000 0
do i dup 3 mod -rot 5 mod -rot -rot * 0=
if i + then
loop ;

这样格式化有意义吗?你把条件放在哪里?如果有您认为格式正确的任何类型的风格指南/示例集合,能否请您引用该示例?

最佳答案

作为初学者,请帮自己一个忙,彻底注释您的代码,例如:

1       : euler1        ( -- n )
2 0 ( n )
3 1000 0 ( n HI-limit LO-index )
4 DO ( n )
5 I DUP ( n i i )
6 3 MOD ( n i mod3 )
7 -ROT ( mod3 n i )
8 5 MOD ( mod3 n mod5 )
9 -ROT ( mod5 mod3 n )
10 -ROT ( n mod5 mod3 )
11 * ( n mod5*mod3 )
12 0= ( n flag )
13 IF
14 i + ( n+i )
15 THEN
16 LOOP
17 ;

你会看到:

  1. 在第 9,10 行 -ROT -ROT 可以通过简单的 ROT 恢复
  2. 没有必要使用 ROT -ROT 来处理数据堆栈上的 3 个项目并且可以像这样简单地使用 SWAP:3 MOD SWAP 5 MOD
  3. 此外,您还可以避免堆栈杂耍并写成:I 3 MOD I 5 MOD

我会这样写:

: div?          ( a b -- f  ; b DIVIDES a ? )
mod 0=
;
: euler1.1 ( -- n )
0
1000 0
DO ( n )
I 3 div? I 5 div? OR
IF
I +
THEN
LOOP
;

关于code-formatting - Forth 代码格式化指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18033779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com