2017-04-12 11 views
0

リストからインデックスを取得する要素を取得したい。しかし、インデックスは、によって別の関数の谷取得します:ラケット、インデックスを使用してリストから値を取得

#lang racket 

(define (list-index e lst) 
    (if (null? lst) 
     0 
     (if (equal? (car lst) (car e)) 
      1 
      (+ 1 (list-index e (cdr lst)))))) 


(list-ref '(aa bb cc dd ee ff) (list-index e lst)) 

例: 私が実行した場合:(リストインデックス「(C)」(ABCD))、これは 『3』を返し、今私はその番号を使用したいですリストを使って2番目の作業で「cc」を得る(aa bb cc dd ee ff)。

問題は、次のとおり

  • (リストインデックスのE LST)は、第二の機能にエラーを与えています。

  • 両方の機能を組み合わせる方法はわかりません。

+0

エラーは、同じ値を渡さないためです。グローバルな「e」とは何ですか?おそらくあなたの引用されたリストと同じではありません。 – Sylwester

答えて

0

まず、そう

(list-ref '(aa bb cc dd ee ff) 3) 

list-refは位置0での最初の要素を考慮することに注意してなる出力'dd、ないCC。第

Eと LST 両方が式内未定義/結合していない変数があるため、(list-index e lst)でエラーが生成されます。プロシージャ(または一般的な関数)を適用するには、実際の値、またはスコープ内の値にバインドされた識別子を渡す必要があります。たとえば、次のように動作し、出力'ddます:出力CC

> (list-ref '(aa bb cc dd ee ff) (list-index '(c) '(a b c d))) 
'dd 

、あなたは

(list-ref '(aa bb cc dd ee ff) (sub1 (list-index '(c) '(a b c d)))) 
'cc 

を行うことができます。また、出力0インデックス位置にlist-index自体を変更することができます。

+0

答えをありがとう!それは私のために非常に便利でした –

+0

あなたは歓迎して、可変スコープで助けが必要な場合、[this](https://cscircles.cemc.uwaterloo.ca/11b-how-functions-work/)または[ this](https://www.wikiwand.com/ja/Scope_(computer_science))が役立ちます。 – assefamaru

関連する問題