方案语言中表达式 let 的问题语法错误

A syntactic error in the question with the expression let in the scheme language

我是scheme scheme新手,开始自学scheme scheme。我解决问题以提高我的语言水平。有一题我答对了,但我想不出错在哪里。我想我把 let 写错了地方。我花了好几个小时来找出问题所在,但我不知道问题出在哪里。 我试着玩弄括号并改变它们的位置,但我觉得这无济于事,而且让我更加困惑。

除最后一段代码外,一切正常。

非常感谢帮助

源代码:

#lang racket

(define(make_times_n n)
  (lambda (x) (* x n)))

(define (square2 x)
  ((make_times_n x) x))

(define (make-parabola a b c)
  (lambda (x) (+ ((make_times_n a) (square2 x)) ((make_times_n b) x) c)))

(define (make-triple a b c)
  (lambda (x) (* (- x a) (- x b) (- x c))))

(define (make_triple_or_parabola_N a b c N)
  ( let* (triple ((make-triple a b c) N)) (parabola  ((make-parabola a b c) N) ) )
  (if ( > triple parabola ) triple parabola)
  )

您缺少一些括号,这是编写和缩进 let*:

的正确方法
(define (make_triple_or_parabola_N a b c N)
  (let* ((triple   ((make-triple a b c) N))
         (parabola ((make-parabola a b c) N)))
    (if (> triple parabola)
        triple
        parabola)))

将其与您所写的进行比较:

(let* (triple   ((make-triple a b c) N))
      (parabola ((make-parabola a b c) N))
  ...)

根据 documentation 我们需要一些额外的 () 围绕变量值对列表,如下所示:

(let* ((triple   ((make-triple a b c) N))
       (parabola ((make-parabola a b c) N)))
  ...)