首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if:错误语法错误(方案编程)

if:错误语法错误(方案编程)
EN

Stack Overflow用户
提问于 2013-09-09 23:29:38
回答 4查看 7.4K关注 0票数 0
代码语言:javascript
复制
(define generalized-triangular
  (lambda (input n)
    (if (= n 1)
        1
        (+ (input n) (generalized-triangular (- n 1))))))

此程序设计为将一个数字和一个函数作为输入,并执行以下操作。

代码语言:javascript
复制
f(1) + f(2) + f(3)+ … + f(N).

一个输入示例是:

代码语言:javascript
复制
(generalized-triangular square 3)

错误消息:

代码语言:javascript
复制
if: bad syntax;
has 4 parts after keyword in: (if (= n 1) 1 (+ (input n) (generalized-triangular (- n 1))) input)
EN

回答 4

Stack Overflow用户

发布于 2013-09-09 23:34:04

错误非常明显-- if表单在条件之后只能有两个部分--后件(如果条件为真)和替代项(如果条件为假)。也许你是这个意思?

代码语言:javascript
复制
(if (= n 1)
    1
    (+ (input n) (generalized-triangular input (- n 1))))

我将input从原始代码移到了错误的位置,因为对generalized-triangular的调用需要两个参数,顺序是正确的。

对于记录:如果您需要在后果式或替代式中执行多个表达式(这不是您的问题的情况,但了解它是有用的),那么您必须将它们打包在一个begin中,例如:

代码语言:javascript
复制
(if <condition> ; condition
    (begin      ; consequent
      <expression1>
      <expression2>)
    (begin      ; alternative
      <expression3>
      <expression4>))

或者,您可以使用具有隐式begincond

代码语言:javascript
复制
(cond (<condition>   ; condition
       <expression1> ; consequent
       <expression2>)
      (else          ; alternative
       <expression3>
       <expression4>))
票数 4
EN

Stack Overflow用户

发布于 2013-09-09 23:39:18

文字答案

您在问题中发布的代码很好:

代码语言:javascript
复制
(define generalized-triangular
  (lambda (input n)
    (if (= n 1)
        1
        (+ (input n) (generalized-triangular (- n 1))))))

您的问题中的错误消息可能是这样的代码:

代码语言:javascript
复制
(define generalized-triangular
  (lambda (input n)
    (if (= n 1)
        1
        (+ (input n) (generalized-triangular (- n 1)))
        input)))

问题出在input上。if的形式为(if <cond> <then> <else>)。不包括if本身,它有3个部分。上面的代码提供了4。

真实答案

两点建议:

  1. 使用DrRacket编写代码,并让它帮助您进行缩进。我无法理解你的原始代码。(即使有人为您编辑了它,缩进仍然有点不稳定,这仍然很难理解。)
  2. 我不知道您的类是什么,但是对于“真正的”球拍代码,我建议使用cond而不是if。球拍有一个非正式的风格指南,也推荐这样做。
票数 3
EN

Stack Overflow用户

发布于 2013-09-10 06:36:39

这是尾部递归

代码语言:javascript
复制
(define (generalized-triangular f n-max)
  (let loop ((n 1) (sum 0))
    (if (> n n-max)
        0
        (loop (+ n 1) (+ sum (f n))))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18701802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档