chelsea1307 发表于 2022-7-6 14:27:33

先除后加

我有一个变量a,我想除以2,然后加一。我可以除法和加法,但我不知道如何除法和加法,我需要另一个变量吗?

Freerefill 发表于 2022-7-6 14:37:06

Lisp是一种非常干净的语言,除了基础代数。。。
 
加法、减法、乘法和除法都在一个类似的概念上工作:它们都是函数,必须这样对待。
 
所以,如果你想把一个数字“N”除以2,然后加一,你需要把它分解,并使用适当的函数。
 

(setq result (/ N 2))
将您的数字除以2。
 

(+ result 1)
将在结果上加一。所以你可以看到,如果你简单地用函数替换变量,你会得到:
 
在做了很多数学的人(或者仅仅是我的人)眼中,这是非常非常混乱的,但LISP就是这样做的。
 
我希望我的闲聊能有所帮助。^

chelsea1307 发表于 2022-7-6 14:48:49

他们帮了很多忙,谢谢你的解释,而不仅仅是答案!

Lee Mac 发表于 2022-7-6 14:54:12

切尔西,另一件事-小心分裂。。。我的意思不仅仅是不提供零分母。。。
 
Divide对INT和实数参数(整数和实数)之间的差异非常敏感。
 
因此:
 

(/ 1 2)   ---> Returns 0

 

(/ 1 2.0)   ---> Returns 0.5

 

(/ 1.0 2.0)   ---> Returns 0.5

 

(/ 1. 2)   ---> Returns 0.5

 
 
因此,如果您提供两个INT作为参数,它将返回一个INT。

Freerefill 发表于 2022-7-6 15:07:54

不客气,你总是乐于助人^^
 
更进一步说,LISP这样做是有原因的。由于它是一个函数,可以接受许多输入,因此如果要将许多数字相加,LISP比其他数字高得多,id est:
 

(setq var (+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .... ))
compared to
set var = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 ...

 
但是,当涉及到需要许多不同运算的复杂方程时,正如李-麦克签名所说的那样,你会迷失在多余的括号中。当你试图通过粘性流体追踪抛射粒子时,这尤其困难…>。>
 
赞成和反对,双刃剑,所有这些。即使代数有点扭曲,LISP仍然很好3.

Lee Mac 发表于 2022-7-6 15:18:33

很好的一个FreeRefill,不是想打败你,而是用LISP,如果你想快速地对一系列数字求和,因为“+”只是库存中的另一个函数,你可以将其与apply一起使用:
 

(setq lst '(1 2 3))

(apply '+ lst)---> Returns: 6

chelsea1307 发表于 2022-7-6 15:24:48

我让用户输入一个管道尺寸,它将作为一个整数输入,以弥补当我除以2时,我真的应该除以2.0来考虑这一点,所以如果它是一个9英寸的管道,它将输出4.5而不是4
(/ A 2.0); where A is an int
而不是
10

Lee Mac 发表于 2022-7-6 15:28:13

准确地说-始终了解您使用的数据类型
页: [1]
查看完整版本: 先除后加