我正在尝试在Racket中打印一对值列表(表示键/值对)。
这是我现在的代码:
#lang racket
(define (write-json keyvalues)
(displayln "{")
(for-each
(lambda (kv) (
(displayln (format "~a: ~a," (car kv) (cdr kv)))))
keyvalues)
(displayln "}"))
(write-json (list (cons "a" 1) (cons "b" 2)))
当我运行该示例时,它会打印:
{
a: 1,
然后,它崩溃了这个错误消息:
application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...: [none]
context...:
/.../racket/collects/racket/private/map.rkt:58:19: loop
"test.rkt": [running body]
for-loop
run-module-instance!125
perform-require!78
知道发生了什么事吗?
谢谢!
答案 0 :(得分:2)
这是个问题。你的lambda体周围有一组额外的括号,即:
( (displayln (format "~a: ~a;" (car kv) (cdr kv))) )
由于displayln
用于副作用,因此其输出无效,因此您的错误消息表明您尝试运行(#<void>)
。
通常,每当您收到错误说明"expected a procedure that can be applied to arguments"
时,请查看代码块中是否有括号问题。像Racket博士这样的编辑会为你突出该区域。