Syntax 请帮助我理解方案:无参数?
第一次使用stackoverflow,但偶尔是潜伏者,希望你们能帮助我 因此,我的作业的第一部分是删除列表中的所有“前导零” 例:(0 0 0 1 0 1)->(1 0 1 0 1) 为此,我想使用IF语句检查第一个元素是否为0,并递归调用列表的其余部分,直到不再有前导零为止。由于我基本上不知道如何在Scheme中编程,通过搜索互联网,我找到了下面的内容。然而,当我运行它时,DrRacket告诉我没有参数-我假设这是一个语法错误。。或者更可能的是,我不知道自己在做什么。所以,如果你能帮我,我会非常感激的Syntax 请帮助我理解方案:无参数?,syntax,scheme,arguments,Syntax,Scheme,Arguments,第一次使用stackoverflow,但偶尔是潜伏者,希望你们能帮助我 因此,我的作业的第一部分是删除列表中的所有“前导零” 例:(0 0 0 1 0 1)->(1 0 1 0 1) 为此,我想使用IF语句检查第一个元素是否为0,并递归调用列表的其余部分,直到不再有前导零为止。由于我基本上不知道如何在Scheme中编程,通过搜索互联网,我找到了下面的内容。然而,当我运行它时,DrRacket告诉我没有参数-我假设这是一个语法错误。。或者更可能的是,我不知道自己在做什么。所以,如果你能帮我,我会非
>(define zz
> (lambda (n)
> (if (= (car (n)) 0)
> (zz (cdr (n)))
> ((n)))))
>
>(remove '(0 0 0 0 1 0 1 0))
我在DrRacket中遇到的错误是:
过程应用程序:预期的过程,给定:(0 0 0 1 0)(无参数)
再次感谢!(请注意,如果格式有点奇怪,很抱歉…)
编辑
好的,改变一些东西,我现在得到一个“expects type作为第一个参数,给定:(0 0 0 0 1 0 1 0);其他参数是:0”错误标记在我的if语句中
>(define zz
> (lambda n
> (if (= (car n) 0) <----- here
> (zz(cdr n))
> (n))))
很有效,非常感谢 (num)
不正确-您试图调用42
或任何命令。(另外,如果语法处于禁用状态,则您的;您可能需要阅读更多代码以更好地理解语法)
这应包括:
(define remove
(lambda (num)
(if (= (car num) 0)
(remove (cdr num))
num)))
除非在引号中使用,否则Lisp中的括号用于调用函数。
好的,OP询问了Scheme的语法概要
a
-由计算器查找并替换其值的符号。有些符号(如42
)会自行计算
'a
-此“引用”符号并将其转换为(引用a)
quote
阻止对其参数求值-而是返回值a
。不是字符串“a”,不是查找a
,a
本身的结果。这也适用于列表(”(1 2 3)
)
(if)
-计算
,查看其值是否真实,并执行相应的值
(cond()
...
(else))
-这将运行它的参数,并计算它的car
,以查看它是否为真。如果是,则返回评估cdr
的值。否则,它将跳到下一个值
(define)
-将计算第二个参数的值设置为第一个参数的名称
(lambda)
-创建一个过程,该过程是将传入的参数绑定到第二个参数中的名称并计算第三个参数的结果
(…)
-如果计算器发现上面的模式都不匹配,那么它将调用列表中的car
作为函数,并使用cdr
中的参数
@Scheme.Is.奇怪抱歉-我打给=
的电话已关机。检查更新的示例。是的,您的代码很完美,您介意解释scheme语法是如何工作的吗?我知道我的问题很模糊,问了很多,但只要一些提示就好了。好吧,我想我会更熟悉这个计划,谢谢!
(define remove
(lambda (num)
(if (= (car num) 0)
(remove (cdr num))
num)))