关于 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))
[*])
[*])
LCJ 用TTT-Z计算? (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))
)
)
前面是公式,后面是你要算的值 看函数说明, 就像defun那样只是没有名字, x 是变量 ,mapcar是循环,依次把表里的元素给x 多谢大师指点 这个函数用的少 。。。 有点迷糊。。。。
就像defun那样只是没有名字, x 是变量 ,mapcar是循环,依次把表里的元素给x
这个好理解多了 多谢 (LAMBDA (X) (TTT-Z X X))
两个X都临时函数的参数X ,传递给TTT-Z 函数,
没有详细去看TTT-Z函数的定义,TTT-Z是个双参数的函数,lambda定义的是单参数的函数 要传递到双参数函数,就重复传递使用了同一个参数。
另外:
(LAMBDA (X Y) (TTT-Z X Y)) 就是双参数传递了,不过楼主的程序不太适用 多谢指点 多谢。。。。 各位大师分析以后,明白多了。再次感谢各位大师。。。 流氓兔 发表于 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]