应用程序:不是程序球拍

Tar*_*nen 3 conditional-statements racket

我是球拍新手。我正在尝试根据用户的输入创建一个列表,当输入值 0 时,将打印前三个元素。

这是代码:

#lang racket
(define lst '())
(define (add)
   (define n(read))
   (if (= n 0)
      ;then
      (
        list (car lst) (cadr lst) (caddr lst) 
       )
      ;else
      (
        (set! lst (append lst (list n)))
        (add)
       )
     )
 )
(add)
Run Code Online (Sandbox Code Playgroud)

我用这些值测试了程序1 2 3 4 5 0

但我不断收到此错误:

application: not a procedure;
 expected a procedure that can be applied to arguments
  given: #<void>
  arguments...:
   '(1 2 3)
Run Code Online (Sandbox Code Playgroud)

谁能帮我找出问题所在。

Ósc*_*pez 5

如果“then”或“else”部分中有多个表达式,则必须将它们括在 a 内begin,因为 Scheme 中的一对()用于函数应用程序- 这解释了您收到的错误。尝试这个:

(define (add)
   (define n (read))
   (if (= n 0)
      ; then
      (list (car lst) (cadr lst) (caddr lst))
      ; else
      (begin
        (set! lst (append lst (list n)))
        (add))))
Run Code Online (Sandbox Code Playgroud)

  • @Tarounen,如果您对答案满意,请不要忘记接受答案。 (2认同)