f5612140 发表于 2004-8-11 08:34:00

串列中數字相加

例如已知串列


(("1F" "15.51" "0" "0" "0" "0" "0")<BR>        ("1F" "0" "6.87" "0" "0" "0" "0") <BR>        ("1F" "0" "0" "0" "130.59" "0" "0") <BR>        ("1F" "0" "0" "0" "0" "7.2" "0")<BR>        ("1F" "0" "0" "0" "0" "0" "15.18")<BR>        ("2F" "0" "0" "11.9" "0" "0" "0")<BR>        ("2F" "0" "0" "0" "146.61" "0" "0") <BR>        ("2F" "0" "0" "0" "0" "7.25" "0")<BR>        ("2F" "0" "0" "0" "0" "0" "18.98") <BR>        ("3F" "0" "0" "62.84" "0" "0" "0")<BR>        ("3F" "0" "0" "0" "98.11" "0" "0")<BR>        ("3F" "0" "0" "0" "0" "6.01" "0")<BR>        ("3F" "0" "0" "0" "0" "0" "11.02")<BR>        ("4F" "0" "0" "56.89" "0" "0" "0")<BR>        ("4F" "0" "0" "0" "55.29" "0" "0")<BR>        ("4F" "0" "0" "0" "0" "5.37" "0")<BR>        ("14F" "0" "0" "56.89" "0" "0" "0")<BR>        ("14F" "0" "0" "0" "55.29" "0" "0")<BR>        ("14F" "0" "0" "0" "0" "5.37" "0")<BR>)


希望结果


(("1F" "15.51" "6.87" "0" "130.59" "7.2" "15.18")<BR>        ("2F" "0" "0" "11.9" "146.61" "7.25" "18.98") <BR>        ("3F" "0" "0" "62.84" "98.11" "6.01" "11.02")<BR>        ("4F" "0" "0" "56.89" "55.29" "5.37"       "0" )<BR>        ("14F" "0" "0" "56.89" "55.29" "5.37" "0")<BR>)


<BR>第一个编号相同者,各项数字相加,后面数字项不一定为6个

ZZXXQQ 发表于 2004-8-11 11:51:00

试一下下面的程序,看看行不行。


(DEFUN LISTADD (FIRST / SL1 I SECOND SDL DL1 L1 DDL1 TEMPL DL2 L2 DDL2 K)<BR>(SETQ SL1 (LENGTH FIRST) I 1 SECOND (LIST) SDL FIRST)<BR>(SETQ DL1 (CAR SDL) L1 (CAR DL1) DDL1 (CDR DL1))<BR>(REPEAT SL1<BR>       (SETQ TEMPL (LIST) SL2 (LENGTH DDL1))<BR>       (SETQ DL2 (NTH I SDL) I (1+ I) L2 (CAR DL2) DDL2 (CDR DL2))<BR>       (IF (= L1 L2) (PROGN<BR>                       (SETQ K 0)<BR>                       (REPEAT SL2<BR>                                       (SETQ TEMPL (CONS (RTOS (+ (ATOF (NTH K DDL1)) (ATOF (NTH K DDL2))) 2 2) TEMPL))<BR>                                       (SETQ K (1+ K))<BR>                       )<BR>                       (SETQ DDL1 (REVERSE TEMPL) TEMPL (LIST))<BR>       )<BR>                       (SETQ SECOND (CONS (APPEND (LIST L1) DDL1) SECOND) L1 L2 DDL1 DDL2)<BR>       )<BR>)<BR>(SETQ SECOND (REVERSE SECOND))<BR>)


(DEFUN C:LADD ()<BR>(LISTADD<BR>'(("1F" "15.51" "0" "0" "0" "0" "0")<BR>        ("1F" "0" "6.87" "0" "0" "0" "0") <BR>        ("1F" "0" "0" "0" "130.59" "0" "0") <BR>        ("1F" "0" "0" "0" "0" "7.2" "0")<BR>        ("1F" "0" "0" "0" "0" "0" "15.18")<BR>        ("2F" "0" "0" "11.9" "0" "0" "0")<BR>        ("2F" "0" "0" "0" "146.61" "0" "0") <BR>        ("2F" "0" "0" "0" "0" "7.25" "0")<BR>        ("2F" "0" "0" "0" "0" "0" "18.98") <BR>        ("3F" "0" "0" "62.84" "0" "0" "0")<BR>        ("3F" "0" "0" "0" "98.11" "0" "0")<BR>        ("3F" "0" "0" "0" "0" "6.01" "0")<BR>        ("3F" "0" "0" "0" "0" "0" "11.02")<BR>        ("4F" "0" "0" "56.89" "0" "0" "0")<BR>        ("4F" "0" "0" "0" "55.29" "0" "0")<BR>        ("4F" "0" "0" "0" "0" "5.37" "0")<BR>        ("14F" "0" "0" "56.89" "0" "0" "0")<BR>        ("14F" "0" "0" "0" "55.29" "0" "0")<BR>        ("14F" "0" "0" "0" "0" "5.37" "0")<BR>)<BR>)<BR>)

f5612140 发表于 2004-8-11 12:22:00

献花一朵
页: [1]
查看完整版本: 串列中數字相加