首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序:非程序敲诈勒索

应用程序:非程序敲诈勒索
EN

Stack Overflow用户
提问于 2014-04-25 14:49:31
回答 3查看 9.9K关注 0票数 3

我对球拍很陌生。我正在尝试从用户的输入创建一个列表,当值0被包含时,将打印前三个元素。

以下是代码:

代码语言:javascript
复制
#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)

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

但是我不断地发现这个错误:

代码语言:javascript
复制
application: not a procedure;
 expected a procedure that can be applied to arguments
  given: #<void>
  arguments...:
   '(1 2 3)

有人能帮我找出问题所在吗。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-25 14:55:33

如果在“然后”或“其他”部分中有多个表达式,则必须将它们包含在begin中,因为Scheme中的一对()用于函数应用程序--这解释了所得到的错误。试试这个:

代码语言:javascript
复制
(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))))
票数 5
EN

Stack Overflow用户

发布于 2017-03-16 14:45:14

我也遇到了类似的问题,在一个函数中,我调用了一个名称相同的结构参数,因此,试图创建该结构的一个实例时,我得到了相同的错误。

示例:

代码语言:javascript
复制
> (struct example (param1 param2) #:transparent)
> (define e (example 1 2))
> e
(example 1 2)
> (define (fn e)
    (example (example-param1 e) 0))
> (fn e)
(example 1 0)
> (define (fn example)
    (example (example-param1 example) 0))
> (fn e)
application: not a procedure;
 expected a procedure that can be applied to arguments
  given: (example 1 2)
  arguments...: 

我希望这能帮到你

票数 1
EN

Stack Overflow用户

发布于 2014-04-25 15:21:47

您的代码有一些问题,例如,如果输入少于3个元素,它将失败。此外,在模块级别定义变量也不是很好的风格。

我建议如下:

代码语言:javascript
复制
(define (add)
  (define (sub cnt lst)
    (define n (read))
    (if (= n 0)
        (reverse lst)
        (if (< cnt 3)
            (sub (add1 cnt) (cons n lst))
            (sub cnt lst))))
  (sub 0 '()))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23296384

复制
相关文章

相似问题

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