【问题标题】:Please Help Me Understand Scheme: No Arguments?请帮我理解方案:没有参数?
【发布时间】:2012-03-29 08:01:14
【问题描述】:

第一次使用stackoverflow,但偶尔潜伏,希望你们能帮助我。

所以我的任务的第一部分是删除列表中的所有“前导零”。

例如:(0 0 0 0 0 1 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 0 1 0 1 0)(无参数)"

再次,非常感谢! (P.S.抱歉,如果格式有点奇怪......)

编辑

好的,改变一些东西,我现在得到一个“期望类型作为第一个参数,给定:(0 0 0 0 0 1 0 1 0);其他参数是:0”在我的 if 语句中标记错误。

    >(define zz
    >  (lambda n
    >    (if (= (car n) 0)   <----- here
    >        (zz(cdr n))
    >        (n))))

编辑 2

    >(define zz
    >  (lambda (n)
    >    (if (= (car n) 0)
    >        (zz (cdr n))
    >        n)))

成功了,非常感谢!

【问题讨论】:

    标签: syntax scheme arguments


    【解决方案1】:

    (num) 不正确 - 您正在尝试调用 42 或其他任何命令。 (此外,您的 if 语法已关闭;您可能需要阅读更多代码以更好地了解语法)。

    这应该编译:

    (define remove
      (lambda (num)
        (if (= (car num) 0)
          (remove (cdr num))
          num)))
    

    Lisp 中的括号用于调用函数,除非在引号中使用。


    好的,OP询问了Scheme语法的一般纲要。
    • a - 一个符号,由评估器查找并替换它的值。某些符号(例如 42)会自行评估。

    • 'a - 这会“引用”符号并将其转换为 (quote a)quote 阻止其参数被评估 - 相反,值 a 被返回。 不是字符串“a”,不是查找aa本身的结果。这也适用于列表 ('(1 2 3))

    • (if &lt;expr&gt; &lt;true-value&gt; &lt;false-value&gt;) - 这将评估&lt;expr&gt;,并查看其值是否为真,并执行相应的值。

    • (cond (<expr> <true-value>) ... (else <false-value>)) - 这会运行它的参数,并评估它的 car 以查看它是否为真。如果是,则返回评估cdr 的值。否则,它会跳到下一个值。

    • (define &lt;name&gt; &lt;expr&gt;) - 将计算第二个参数的值设置为第一个参数的名称。

    • (lambda &lt;arg-list&gt; &lt;body&gt;) - 创建一个过程,该过程是将传入的参数绑定到第二个参数中存在的名称并评估第三个参数的结果。

    • (&lt;func&gt; &lt;arg1&gt; &lt;arg2&gt; ... &lt;argn&gt;) - 如果评估器发现上述模式都不匹配,则它将列表的car 作为函数调用,参数在cdr 中。

    【讨论】:

    • @Scheme.Is.Strange 抱歉 - 我对 = 的呼叫已关闭。检查更新的示例。
    • 是的,您的代码很完美,您介意解释一下方案语法的工作原理吗?我知道我的问题含糊不清,而且问了很多,但只是一些提示会很好。
    • 好的,我想我会更加熟悉Scheme,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多