function - Racket : expected: procedure?

标签 function runtime-error scheme racket contract

我有以下代码:

(define numbers '(2 3 5 3 1 22 2))

(define (count val l) 
    (if (null? l)
        0
        (+
            (if (= (first l) val) 1 0)
            (count val (rest l))   
        )
    )
)

(display (count 6 numbers))

(对不起,如果我的代码看起来很糟糕,只需要使用这种语言一次)

编译器说:
count: contract violation
  expected: procedure?
  given: 6
  argument position: 1st
  other arguments...:
   '(3 5 3 1 22 2)

最佳答案

您正在交互区域中输入代码。

别。在源代码区域中输入它,然后加载它。然后就可以了。

发生的是,函数 count 已经存在,您正在重新定义它。但是,如果您在交互区域中执行此操作,则新函数将使用已经存在的函数,而不是像应该那样递归地调用自身:

(define (count val l) 
    (if (null? l)
        0
        (+
            (if (= (first l) val) 1 0)
            (count val (rest l))       ;; ****** HERE
        )
    )
)

并且现有函数期望将过程作为其第一个参数,如其文档所示。

关于function - Racket : expected: procedure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59991010/

相关文章:

c++ - boost 函数映射到字符串

java - 当放大/缩小太快并出现奇怪错误时,Google Maps Activity 崩溃

macros - Racket 宏可以接受关键字参数吗?

haskell - 将 Scheme call/cc 翻译成 Haskell callCC

javascript - 如何替换数组中的某个符号?

function - Vala 中的通用函数

javascript - Node 中的箭头函数提升?

ios - Swift:应用程序因未捕获的异常 'NSUnknownKeyException' 而终止

node.js - Heroku 上的 ffmpeg,EC2 : TypeError: Cannot read property 'on' of undefined , ffmpegProc.stdout.on ('data',函数(数据){ ^

scheme - 如何检查我的列表以查看它是否仅包含一个值或多个值?