Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 644
Hei!

Jeg lurte på om noen har en god metode for å endre en liste med tall til å bli ett tall sammensatt av alle elementene i lista?

Eksempel: (listefikser '(1 2 3 4)) --> 1234

Takker for svar!
I VB kan dette gjøres slik:
Men såg i ettertid at det var i Lisp du ville det..

Test.txt:

Kode

1 2 3 4 5 6 7
1 23 34 5 6 7
2 4 5 6 8
6 7 9 90 2
Fikser.vbs

Kode

Function FiksLinje(input)
 input = Trim(input)
 input = Replace(input, " ", "")
 FiksLinje = input
End Function


Set fs = CreateObject("Scripting.FileSystemObject")
Set f  = fs.GetFile("test.txt")
fs.CreateTextFile("resultat.txt")
Set nf = fs.GetFile("resultat.txt")
Set fStream = f.OpenAsTextStream(1)
Set nfStream = nf.OpenAsTextStream(2)
Do Until fStream.AtEndOfStream
 Dim linje
 linje = fStream.ReadLine()
 nfStream.WriteLine(FiksLinje(linje))
Loop
nfStream.Close()
fStream.Close()
Set nfStream = nothing
Set fStream = Nothing
Set f = Nothing
Set nf = Nothing
Set fs = Nothing
Gir resultatet:
resultat.txt

Kode

1234567
12334567
24568
679902
Sist endret av brgr; 7. oktober 2007 kl. 14:49.
Ville tatt ett element i listen av gangen, hvis det ikke var det siste tallet i listen, gang med 10, og kall funksjonen rekursivt med resten av listen.

Vet ikke hva slags lisp du benytter, men ville blitt noe ala dette:

Kode

function parseInt (i, h :: nil ) = ((i * 10) + h)
|           parseInt (i, h :: t )   = parseInt((i * 10) + h, t);
En ting du må huske på er at du sikkert må konvertere tegn i listen til tall på egen hånd.

[edit]
Dette minner mistenkelig mye om en programmeringsoppgave, og vil sterkt anbefale deg å jobbe mye med dette så du skjønner det, hvis ikke kan det være du sitter og denger hodet i pulten under eksamen
[/edit]
Sist endret av Vanter; 8. oktober 2007 kl. 14:24.
▼ ... over en uke senere ... ▼
Muligens litt sent, men her er en fungerende versjon i Scheme:

Kode

(define (list->number l)
    (if (null? l) 0
        (+ (* (expt 10 (- (length l) 1)) (car l))
           (list->number (cdr l)))))
Bør ikke være noe problem å porte denne til f.eks. Common Lisp, eller skrive den om til å utvikle en iterativ prosess.