2011-12-10 6 views
1

リストのリストの一部である2つのリスト の関数を適用するために次のコードを書きましたが、何らかの理由で結果に#<void>の値があります。2つのリストに関数を適用しようとしています

コード:

(define (applyFunc list) 
    (cond ((null? list)()) 
      ((null? (cdr list)) (car list)) 
      (else (cons (func (car list) (car (cdr list))) 
       (applyFunc (cdr (cdr list))))))) 

funcが、私は自分のコードをトレースから何を得る与えられた二つのリスト

に機能を適用する関数では、次のとおりです。

>(applyFunc '((1) (1 1) (1 1 1) (1 1 1 1))) 

> (applyFunc '((1 1 1) (1 1 1 1))) 

> >(applyFunc '()) 

< <'() 

< '(#<void>) 

<'(#<void> #<void>) 

(#<void> #<void>) 

[入力を想定しは'((1) (1 1) (1 1 1) (1 1 1 1))]

+0

コンプの最初の項目に合わせて(applyFunc(cdr list)))ビットをインデントすると便利です。私はそれを編集しようとしましたが、編集は何らかの理由で少なくとも6つの空でない文字でなければなりません。 – yarian

答えて

-1

私は上記の、オスカーに同意します。あなたのコードの主な問題は、空の場合、'()の代わりに()を返すことでした。

命名規則に関しては、listは技術的にはうまく動作するはずですが、Oscarのように、組み込みプロシージャを上書きする危険性があると一般には考えられません。

()'()に変更してコードを更新し、完璧に動作しました。

4

エラーの数ORSは、最初の世話をする:

  • そのスキームの組み込み手順だからあなたは、プロシージャのパラメータ(またはそのことについて何か)listを呼び出すべきではありません、あなたはそれを上書きすることでしょう。最初の状態では
  • は、通常は'()、ないそれ以外()

を返すことです、あなたの手順が正常に動作します:

(define (applyFunc lst) 
    (cond ((null? lst) '()) 
     ((null? (cdr lst)) (car lst)) 
     (else (cons (func (car lst) (car (cdr lst))) 
        (applyFunc (cdr (cdr lst))))))) 

それは問題がfunc手順である可能性があります、それが本当に2つのリストで動作することを確認してください。私はこれを使用してコードをテストし、それが滞りなく働い:

(define (func l1 l2) 
    (append l1 l2)) 
+1

私は人々が ''いくつかのリスト ''の一般的な変数名として 'xs'を使うことも見てきました。 (一部の人々は、いくつかのフォントで 'lst'が' 1st 'にどのように似ているのが好きではありません(Scheme '1st'は正式な名前です(はい、私は散文の中にあまり括弧を入れていません) –

関連する問題