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

1 lisp scheme racket

(define generalized-triangular\n  (lambda (input n)\n    (if (= n 1)\n        1\n        (+ (input n) (generalized-triangular (- n 1))))))\n
Run Code Online (Sandbox Code Playgroud)\n\n

该程序旨在以数字和函数作为输入并执行以下操作。

\n\n
f(1) + f(2) + f(3)+ \xe2\x80\xa6 + f(N).\n
Run Code Online (Sandbox Code Playgroud)\n\n

输入示例如下:

\n\n
(generalized-triangular square 3)\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误消息:

\n\n
(define generalized-triangular\n  (lambda (input n)\n    (if (= n 1)\n        1\n        (+ (input n) (generalized-triangular (- n 1))))))\n
Run Code Online (Sandbox Code Playgroud)\n

Ósc*_*pez 5

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

(if (= n 1)
    1
    (+ (input n) (generalized-triangular input (- n 1))))
Run Code Online (Sandbox Code Playgroud)

我从原始代码中移出了input,它位于错误的位置,因为对 的调用generalized-triangular需要两个参数,并且顺序正确。

郑重声明:如果您需要在后续或替代中执行多个表达式(您的问题不是这种情况,但了解它很有用),那么您必须将它们打包在 a 中begin,例如:

(if <condition> ; condition
    (begin      ; consequent
      <expression1>
      <expression2>)
    (begin      ; alternative
      <expression3>
      <expression4>))
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 a cond,它具有隐式begin

(cond (<condition>   ; condition
       <expression1> ; consequent
       <expression2>)
      (else          ; alternative
       <expression3>
       <expression4>))
Run Code Online (Sandbox Code Playgroud)