0

'(abc) の 2 番目の値を取得したいのですが、cadr は使用したくありません。私は正しい答えを得ることができます:

(car (cdr '(a b c)))

'b

しかし、私が関数を構築したとき:

(define test (lambda (list) (car (cdr (list)))))

(test '(a b c))

次のエラーが表示されます。

. . application: not a procedure;
 expected a procedure that can be applied to arguments
  given: '(a b c)
  arguments...: [none]

このエラーが何を意味するのか本当にわかりません。

4

1 に答える 1

2

あなたのコードには、listパラメーターを囲む誤った括弧があります-Scheme this:は「引数なしで関数を(f)適用する」ことを意味するため、コードでは、 this: はパラメーターを関数であるかのように呼び出そうとしていますが、そうではありません。エラー。f(list)list

また、パラメーターを呼び出すのは悪い考えであることに注意してlistください。その名前の組み込みプロシージャーが既に存在します。そのため、名前を に変更しましたlst。これで修正されるはずです:

(define test
  (lambda (lst)
    (car (cdr lst))))

(test '(a b c))
=> b
于 2013-10-17T15:21:51.720 に答える