f4800 发表于 2022-2-4 08:01:17

关于 LAMBDA (X) 函数 不太明白

本帖最后由 f4800 于 2022-2-4 08:03 编辑


[*]
[*]不太明白这一段函数(TTT-Z X X),X X 怎么区别是哪一个函数 哪一个是 (LAMBDA (X) 里面的(X)
[*]请 各位大师不吝指导下
[*]

[*]

[*](setq LCHJ (MAPCAR '(LAMBDA (X) (TTT-Z X X)) LCHJ))
[*](DEFUN TTT-Z(LCWB XINXI / +WZH -WZH KWZH LCH BMI KMI)

[*](setq DASC (ASCII ","))
[*](setq -ASC (ASCII "~"))
[*](setq +ASC (ASCII "+"))
[*](setq KASC (ASCII "K"))
[*](setq \NASC (ASCII "\n"))
[*](setq _ASC (ASCII "-"))
[*](setq XSDASC (ASCII "."))
[*](setq :ASC (ASCII ":"))


[*](setq +WZH (VL-STRING-POSITION +ASC LCWB))
[*](setq -WZH (VL-STRING-POSITION _ASC LCWB))
[*](setq KWZH (VL-STRING-POSITION KASC LCWB))
[*](if (NOT (WCMATCH LCWB "*[~.-9K+-]*"))
[*]    (PROGN (COND ((AND +WZH KWZH)
[*]                   (setq KMI (SUBSTR LCWB (1+ KWZH) +WZH))
[*]                   (setq BMI (SUBSTR LCWB (+ 2 +WZH)))
[*]                   (setq KMI (SUBSTR KMI 2))
[*]                   (setq KMI (ATOF KMI))
[*]                   (setq BMI (ATOF BMI))
[*]                   (setq LCH (+ (* 1000 KMI) BMI))
[*]               )
[*]             ((AND -WZH KWZH)
[*]               (setq KMI (SUBSTR LCWB (1+ KWZH) -WZH))
[*]               (setq BMI (SUBSTR LCWB (+ 2 -WZH)))
[*]               (setq KMI (SUBSTR KMI 2))
[*]               (setq KMI (* -1 (ATOF KMI)))
[*]               (setq BMI (ATOF BMI))
[*]               (setq LCH (- (* 1000 KMI) BMI))
[*]             )
[*]             ((AND (NOT +WZH) (NOT KWZH) (/= "" LCWB))
[*]               (setq LCH (ATOF LCWB))
[*]             )
[*]             (T (setq LCH XINXI))
[*]         )
[*]    )
[*]    (PROGN (setq LCH XINXI))
[*])
[*])

流氓兔 发表于 2022-2-4 09:46:04

LCJ 用TTT-Z计算?

流氓兔 发表于 2022-2-4 09:47:41

(setq LCHJ (MAPCAR '(LAMBDA (X) (TTT-Z X X)) LCHJ))
(DEFUN TTT-Z(LCWB XINXI / +WZH -WZH KWZH LCH BMI KMI)

(setq DASC (ASCII ","))
(setq -ASC (ASCII "~"))
(setq +ASC (ASCII "+"))
(setq KASC (ASCII "K"))
(setq \NASC (ASCII "\n"))
(setq _ASC (ASCII "-"))
(setq XSDASC (ASCII "."))
(setq :ASC (ASCII ":"))

(setq +WZH (VL-STRING-POSITION +ASC LCWB))
(setq -WZH (VL-STRING-POSITION _ASC LCWB))
(setq KWZH (VL-STRING-POSITION KASC LCWB))
(if (NOT (WCMATCH LCWB "*[~.-9K+-]*"))
    (PROGN (COND ((AND +WZH KWZH)
                   (setq KMI (SUBSTR LCWB (1+ KWZH) +WZH))
                   (setq BMI (SUBSTR LCWB (+ 2 +WZH)))
                   (setq KMI (SUBSTR KMI 2))
                   (setq KMI (ATOF KMI))
                   (setq BMI (ATOF BMI))
                   (setq LCH (+ (* 1000 KMI) BMI))
               )
             ((AND -WZH KWZH)
               (setq KMI (SUBSTR LCWB (1+ KWZH) -WZH))
               (setq BMI (SUBSTR LCWB (+ 2 -WZH)))
               (setq KMI (SUBSTR KMI 2))
               (setq KMI (* -1 (ATOF KMI)))
               (setq BMI (ATOF BMI))
               (setq LCH (- (* 1000 KMI) BMI))
             )
             ((AND (NOT +WZH) (NOT KWZH) (/= "" LCWB))
               (setq LCH (ATOF LCWB))
             )
             (T (setq LCH XINXI))
         )
    )
    (PROGN (setq LCH XINXI))
)
)
前面是公式,后面是你要算的值

和尚777 发表于 2022-2-4 10:21:25

看函数说明, 就像defun那样只是没有名字, x 是变量 ,mapcar是循环,依次把表里的元素给x

f4800 发表于 2022-2-4 11:15:12

多谢大师指点    这个函数用的少   。。。 有点迷糊。。。。
就像defun那样只是没有名字, x 是变量 ,mapcar是循环,依次把表里的元素给x   
这个好理解多了    多谢

muwind 发表于 2022-2-4 14:03:27

(LAMBDA (X) (TTT-Z X X))
两个X都临时函数的参数X ,传递给TTT-Z 函数,
没有详细去看TTT-Z函数的定义,TTT-Z是个双参数的函数,lambda定义的是单参数的函数 要传递到双参数函数,就重复传递使用了同一个参数。
另外:
(LAMBDA (X Y) (TTT-Z X Y)) 就是双参数传递了,不过楼主的程序不太适用

f4800 发表于 2022-2-6 08:06:51

多谢指点    多谢。。。。

f4800 发表于 2022-2-6 08:07:24

各位大师分析以后,明白多了。再次感谢各位大师。。。

f4800 发表于 2022-2-13 22:36:53

流氓兔 发表于 2022-2-4 09:47
(setq LCHJ (MAPCAR '(LAMBDA (X) (TTT-Z X X)) LCHJ))
(DEFUN TTT-Z(LCWB XINXI / +WZH -WZH KWZH LCH...

多谢大师指导   
页: [1]
查看完整版本: 关于 LAMBDA (X) 函数 不太明白