Syntax Lisp:IF条件使用AND运算符
我正在做这个函数Syntax Lisp:IF条件使用AND运算符,syntax,lisp,common-lisp,Syntax,Lisp,Common Lisp,我正在做这个函数 (f 3 4) (sum = 7) (f 'a 'b) (not num!) 我的问题是如何使用条件和运算符生成if 我试着 (如果(和(类型a'整数)(类型b'整数))(1)(0)) (如果(和((typep a'整数))((typep b'整数)))(1)(0)) (如果((和((typep a'整数))((typep b'整数)))(1)(0)) 但它不起作用。 (1) (0)是我临时设置的 我能得到一些lisp语法的帮助吗?现在你需要了解的关于lisp的最重要的事
(f 3 4) (sum = 7)
(f 'a 'b) (not num!)
我的问题是如何使用条件和运算符生成if
我试着
(如果(和(类型a'整数)(类型b'整数))(1)(0))
(如果(和((typep a'整数))((typep b'整数)))(1)(0))
(如果((和((typep a'整数))((typep b'整数)))(1)(0))
我能得到一些lisp语法的帮助吗?现在你需要了解的关于lisp的最重要的事情是parens很重要 在C语言中,你可以写
1+3
,(1)+3
,((1+3)))
,它们的意思都是一样的。在lisp中,它们非常不同:
表示“名为a
的变量的值”a
表示“名为(a)
的函数在没有任何参数的情况下调用的返回值”a
是一个语法错误(但请参见PPS)((a))
(…)
的版本都是完全错误的
因为没有名为1
的函数,所以第一个版本也不好
您需要的是:
(if (and (typep a 'integer)
(typep b 'integer))
1
0)
注意格式和缩进。
Lisper通过缩进而不是parens来读取代码,所以正确的缩进是至关重要的。
请注意,Emacs(可能还有其他一些特定于Lisp的IDE)将为您缩进Lisp代码
PS.对您试图完成的任务的描述不清楚,但最简单的方法可能是使用通用函数:
(defgeneric f (a b)
(:method ((a integer) (b integer))
(+ a b)))
(f 1 2)
==> 3
(f 1 'a)
*** - NO-APPLICABLE-METHOD: When calling #<STANDARD-GENERIC-FUNCTION F> with
arguments (1 A), no method is applicable.
或:
但是您还不必担心这些问题。现在您需要了解的关于Lisp的最重要的事情是parens很重要 在C语言中,你可以写
1+3
,(1)+3
,((1+3)))
,它们的意思都是一样的。在lisp中,它们非常不同:
表示“名为a
的变量的值”a
表示“名为(a)
的函数在没有任何参数的情况下调用的返回值”a
是一个语法错误(但请参见PPS)((a))
(…)
的版本都是完全错误的
因为没有名为1
的函数,所以第一个版本也不好
您需要的是:
(if (and (typep a 'integer)
(typep b 'integer))
1
0)
注意格式和缩进。
Lisper通过缩进而不是parens来读取代码,所以正确的缩进是至关重要的。
请注意,Emacs(可能还有其他一些特定于Lisp的IDE)将为您缩进Lisp代码
PS.对您试图完成的任务的描述不清楚,但最简单的方法可能是使用通用函数:
(defgeneric f (a b)
(:method ((a integer) (b integer))
(+ a b)))
(f 1 2)
==> 3
(f 1 'a)
*** - NO-APPLICABLE-METHOD: When calling #<STANDARD-GENERIC-FUNCTION F> with
arguments (1 A), no method is applicable.
或:
但是您还不需要担心这些问题。当您删除数字周围的括号时,第一个应该会起作用(将
(1)(0)
更改为10
)。您也可以使用integerp
而不是(typep…'integer)
谢谢您的回复。下次请复制并粘贴您的代码和收到的错误消息。我们会教你如何理解错误信息。我会的。谢谢您的建议。当您删除数字周围的括号(将(1)(0)
更改为1 0
)时,第一个应该有效。您也可以使用integerp
而不是(typep…'integer)
谢谢您的回复。下次请复制并粘贴您的代码和收到的错误消息。我们会教你如何理解错误信息。我会的。谢谢你的建议。