Scheme DrRacket定义开始集!也许应该工作,但不要

Scheme DrRacket定义开始集!也许应该工作,但不要,scheme,lisp,racket,Scheme,Lisp,Racket,我正在学习用DrRacket进行lisp编程考试 在演讲中,我发现了以下代码: (define (f a b c) (define delta) (begin (set! delta (- (* b b) (* 4 a c)) (if (>=? delta 0) (writeln ”są pierwiastki”) (writeln ”nie ma pierwiastków))))) 但

我正在学习用DrRacket进行lisp编程考试

在演讲中,我发现了以下代码:

(define (f a b c)
    (define delta)
    (begin
        (set! delta (- (* b b) (* 4 a c)) 
        (if (>=? delta 0)
             (writeln ”są pierwiastki”)
             (writeln ”nie ma pierwiastków)))))
但是它不起作用。 DrRacket正在展示:

. define: bad syntax (missing expression after identifier) in: (define delta)
我以后不能设置
delta
值吗

有什么问题? 提前感谢

试试这个:

#lang racket

(define (f a b c)
  (define delta 0)
  (set! delta (- (* b b) (* 4 a c)))
  (if (>= delta 0)
      (displayln "są pierwiastki")
      (displayln "nie ma pierwiastków")))
您的代码有什么问题:

  • 这可能是复制粘贴错误,但在Scheme中,我们使用
    字符来分隔字符串,而不是像代码中那样使用
    。最后一行缺少结束符
  • 尽管一些解释器接受没有初始值的
    定义
    ,但标准是变量名后面必须有一个值
  • 集合末尾缺少右括号
  • 定义
    设置行可以合并为一行:
    (定义delta(-(*b-b)(*4a-c))
  • =?
    运算符在Scheme中不是标准的,它可能在解释器中工作,但如果可能,请使用标准的
    =
  • writeln
    程序在Scheme中不是标准的,在Racket中可以用它代替
    displayln
  • 这不是一个真正的错误,但您不需要在过程定义中编写
    begin
    ,它是隐式的
总而言之:问题中的代码似乎是针对不同的解释器的,这个问题被标记为
racket
,但相信我,你所拥有的不是有效的racket代码-heck,甚至不是标准方案。确保使用正确的解释器,并对文本中的打字错误保持高度警惕。

尝试以下方法:

#lang racket

(define (f a b c)
  (define delta 0)
  (set! delta (- (* b b) (* 4 a c)))
  (if (>= delta 0)
      (displayln "są pierwiastki")
      (displayln "nie ma pierwiastków")))
您的代码有什么问题:

  • 这可能是复制粘贴错误,但在Scheme中,我们使用
    字符来分隔字符串,而不是像代码中那样使用
    。最后一行缺少结束符
  • 尽管一些解释器接受没有初始值的
    定义
    ,但标准是变量名后面必须有一个值
  • 集合末尾缺少右括号
  • 定义
    设置行可以合并为一行:
    (定义delta(-(*b-b)(*4a-c))
  • =?
    运算符在Scheme中不是标准的,它可能在解释器中工作,但如果可能,请使用标准的
    =
  • writeln
    程序在Scheme中不是标准的,在Racket中可以用它代替
    displayln
  • 这不是一个真正的错误,但您不需要在过程定义中编写
    begin
    ,它是隐式的

总而言之:问题中的代码似乎是针对不同的解释器的,这个问题被标记为
racket
,但相信我,你所拥有的不是有效的racket代码-heck,甚至不是标准方案。确保使用正确的解释器,并对文本中的打字错误保持高度警惕。

原始错误消息是因为

(define delta)
缺少一个值。相反,它应该是这样的:

(define delta 0)
还有一些其他问题:

  • 双引号不是
    字符,无法识别 靠敲诈

  • 有些家长错了

我也不知道为什么它是
define
-ing
delta
,然后立即
设置!
-ing它

我试图修改/简化你发布的内容,并提出了 但是我不确定这个函数应该是什么 是的,所以我不知道示例输出是否正确

#lang racket
(define (f a b c)
  (define delta (- (* b b) (* 4 a c)))
  (if (>= delta 0)
      (displayln "są pierwiastki")
      (displayln "nie ma pierwiastków")))

;; Example output:
(f 1 2 3)
;;-> nie ma pierwiastków
(f 1 200 3)
;;-> są pierwiastki

原始错误消息是因为

(define delta)
缺少一个值。它应该类似于:

(define delta 0)
还有一些其他问题:

  • 双引号不是
    字符,无法识别 靠敲诈

  • 有些家长错了

我也不知道为什么它是
define
-ing
delta
,然后立即
set-正在加载它

我试图修改/简化你发布的内容,并提出了 下列的但是我不确定这个函数应该是什么 是的,所以我不知道示例输出是否正确

#lang racket
(define (f a b c)
  (define delta (- (* b b) (* 4 a c)))
  (if (>= delta 0)
      (displayln "są pierwiastki")
      (displayln "nie ma pierwiastków")))

;; Example output:
(f 1 2 3)
;;-> nie ma pierwiastków
(f 1 200 3)
;;-> są pierwiastki
我认为格雷格已经解决了你的问题,但我只想添加明显的
let
版本的代码:

;;对于给定的ax^2+bx+c=0
;; 这将显示它是否至少有一个
;; 实数回答与否
(定义(方程式有答案a b c)
(let((((*4B)(*4A)))
(如果(>=增量0)
(displayln“有答案”)
(displayln“没有答案”))
要创建谓词,可以执行以下操作:

;;对于给定的ax^2+bx+c=0
;; 如果至少有一个,则返回#t
;; 实数回答,否则为#f
(定义(方程式有答案?a b c)
(>=(((*BB)(*4C))0)
我认为格雷格已经解决了你的问题,但我只想添加明显的
let
版本的代码:

;;对于给定的ax^2+bx+c=0
;; 这将显示它是否至少有一个
;; 实数回答与否
(定义(方程式有答案a b c)
(let((((*4B)(*4A)))
(如果(>=增量0)
(displayln“有答案”)
(displayln“没有答案”))
要创建谓词,可以执行以下操作:

;;对于给定的ax^2+bx+c=0
;; 如果至少有一个,则返回#t
;; 实数回答,否则为#f
(定义(方程式有答案?a b c)
(>=(((*BB)(*4C))0)

如果代码不是英文的,并且您没有说明该过程应该做什么。这是很难帮助的。即使它是英文的,你也应该提供一个预期的结果。这个函数似乎在检查一个二次方程是否有实解,文本是波兰语,读起来像“有元素”和“没有元素”。我读了你的评论,也从