に追加されていません。なぜリストは次のように私は小さなテキストファイルを持っているラケット
one, 50, 40, 65, 500
two, 80, 70, 100, 250
three, 100, 55, 125, 100
four, 50, 45, 58, 850
私はそれを読むために、各ラインの第二列のすべての値のリストを作成しようとしています。
#lang racket
(define (testfn fname)
(let ((sl '()) (list2 (list)) (templist '()) (ss ""))
(set! sl (file->lines fname))
(for ((line sl))
(set! templist (string-split line ","))
(println templist)
(set! ss (list-ref templist 1))
(println ss)
(append list2 ss) ; does not work
(append list2 (list ss)) ; does not work
(cons ss list2) ; does not work
(cons (list ss) list2) ; does not work
(cons list2 (list ss)) ; does not work
(cons list2 ss) ; does not work
(println list2)
)
(println list2)))
(testfn "test.txt")
しかし、「リスト2」は、私が上記の使用している多くの方法のいずれかと、文字列「SS」で追加取得されていません:以下の私が使用していたコードです。出力には次のように表示されます。
'("one" " 50" " 40" " 65" " 500")
" 50"
'()
'("two" " 80" " 70" " 100" " 250")
" 80"
'()
'("three" " 100" " 55" " 125" " 100")
" 100"
'()
'("four" " 50" " 45" " 58" " 850")
" 50"
'()
'()
>
問題はどこにありますか?どのように解決できますか?
編集:間違いを修正することは@JohnClementsによって指摘された後、次のコードは動作します:
#lang racket
(define (testfn fname)
(let ((sl '()) (list2 (list)) (templist '()) (ss ""))
(set! sl (file->lines fname))
(for ((line sl))
(set! templist (string-split line ","))
(set! ss (list-ref templist 1))
(set! list2 (append list2 (list ss)))
(println list2)
)
(println list2)))
(testfn "test.txt")
出力:
'(" 50")
'(" 50" " 80")
'(" 50" " 80" " 100")
'(" 50" " 80" " 100" " 50")
'(" 50" " 80" " 100" " 50")
>
はい、私はそれを得ました。 (set!list2(append list2(list ss)))が働いていました。ありがとう。 – rnso
2番目(短い方)のプログラムがどのように機能しているかを説明できるとすばらしいことでしょう。 – rnso
このプログラムはこう言っています:testfn2は関数で、引数は 'fname'です。あなたがそれを呼び出すと、ファイル内のすべての行を考慮し、その行をコンマで区切った結果の2番目のものを取って得られた結果のリストを作成します。 –