2017-01-21 4 views
0

が表示されません最初のリスト "x"に進みます。プロセスは次のようになります(cons a1(cons a2 ....(cons y)..))、そしてプログラムはyを(y cons)最終的に(cons-1、append(cdr x)y)と(append(cdr x)、y)の結果がyであるからですか?スキームアペンド機能のワークフロー

答えて

0

あなたの関数には、解析中に最後に1つの閉じ括弧がありすぎるようなエラーがあります。 yの直後にifを閉じるため、私は薄型キットを使用しています。そのため、常に最後の式が実行され、xが空の場合は失敗します。ベースケース、私は一般的に、最も簡単なことで再帰関数を説明したいので、我々は明らかに始める

(define (append x y) 
    (if (null? x) 
     y 
     (cons (car x) 
      (append (cdr x) 
        y)))) 

(append '() '(3 4)) 

これがなる

正しいAPPENDは、次のようになります#txであり、結果は(3 4)である。null?である。今xように、1つの要素のリストを試すことができます:

(append '(2) '(3 4)) 

これは `nullであることxため#fのですか?したがって、あなたがでそれを置き換えることができます:

​​

我々は'(2)にアクセサを評価することができます。

(cons 2 (append '() '(3 4)) 

私たちは私たち'(3 4)あるappend一部、答えを知っている前に、我々はベースケースをしたので、終わる:

(cons 2 '(3 4)) ; ==> (2 3 4) 

x新しい操作を行うことができます以前xとしてここ

(append '(1 2) '(3 4)) 

ので、あなたは再び代替で代用null?ではありません。もう一度私たち

(cons 1 
     (append '(2) 
       '(3 4))) 

お知らせ:私たちはアクセサを評価することができ、前回のよう

(cons (car '(1 2)) 
     (append (cdr '(1 2)) 
       '(3 4))) 

appendに慣れ親しんでいるので、私たちは最後の結果に置き換えることができます。しかし、私は前にステップを踏んで、あなたが気づいたパターンを見てみましょう:

(cons 1 (cons 2 (append '() '(3 4)))) ; ==> 
(cons 1 (cons 2 '(3 4)))    ; ==> 
(cons 1 '(2 3 4))      ; ==> 
; ==> (1 2 3 4) 

あなたは12の要素を持っているので、場合xそれは基本ケースを打つ前に、ネストされた12の短所を取得し、リストは常に先頭に終わりから作成されるための機能を評価する必要があるので、それは、外側に、内側を評価申請前の議論。

関連する問題