2016-10-08 5 views
0

私はスキームを使い始めていますが、何が間違っているのか分かりません。Schemeのifステートメントで引数を渡すとエラーが発生する

(let ((fn (car last-elem)) 
     (output(if (> (length last-elem) 1) ;or = needed? 
       (cdr last-elem) 
       ('())))) 

(cond ((equal? fn 'dim) (dim output)) 
     ((equal? fn 'print) (print output)) 

このコードは、私のテストケースのこんにちは、世界、印刷する文を生成し、それを通過することになっています!

印刷が今である(それは後でので、私は新しい機能が必要ですより多くのものを持っています)ちょうどこの:と

(define (print args) 
    (display(args)) 
    (newline) 

このエラーアウト:

アプリケーション:ない手順。 ... [なし] コンテキスト::(「こんにちは、世界!」) 引数...: は、引数に適用することができ手続き 与えられた期待私はライト・トラック上だと思う

を、私が得たいと思っている出力は、「与えられた」ものであるからです。しかし、私はそれを印刷するだけです。

このエラーについては、他にもいくつか質問がありますが、その解決策は私には役に立たなかったと思います。

ありがとうございます。

+0

「dim」と「last-elem」とは何ですか? –

+0

dimが現在使用されていないという質問に手順がない場合、last-elemはリストの最後の要素です。プログラムの全体的な目的は、愚かな基本的な通訳であり、プログラムを受け取り実行することです。問題のプログラムは単に「こんにちは、世界!」と印刷するだけです。だからこそ私は他のすべてのものが働いていると確信している。私はスキームはあまりよく分からないので、ここではほとんど推測をしています。 –

+0

未使用の部品を取り除くことから始めます。さもなければ、コードはコンパイルされません。現在スコープに含まれていない変数またはプロシージャは参照できません。 –

答えて

1

手始めに、print手順は括弧の余分な、誤ったセットを持って、それは次のようになります。あなたが取得する場合

(define (print args) 
    (display args) 
    (newline)) 

は:;エラー「アプリケーションをしませ手続きの手順を期待」、それはスキームで(f)を使用していることを意味しています。は、fがプロシージャでない場合、エラーが発生した場合は、無引数プロシージャとしてfを適用します。

+0

>(表示するargs)これは固定されていますが、違いは何ですか? –

+0

最後の段落を参照してください –

+0

私は、おかげで束を理解します。 –

関連する問題