Das hinzufügen eines Elements zu einer Liste in Scheme
Ich bin mit R5RS Scheme und ich will einfach nur zu implementieren, die eine Funktion zurückgibt, die den Schnittpunkt von zwei gegebenen Listen, aber ich kann das nicht tun, denn ich kann mich nicht fügen Sie ein element in einer Liste. Hier ist mein code. Wie kann ich es beheben? Ich bin wirklich ein Anfänger in der Schema - dies ist meine erste Arbeit mit Schema.
thx im Voraus..
(define list3 '())
(define (E7 list1 list2)
(cond
((null? list1)
list3)
((member (car list1) list2) (append list3 (list (car list1))))
)
(cond
((null? list1)
list3)
((not(null? list1)) (E7 (cdr list1) list2)
)
)
)
(E7 '(4 5) '(3 4))
Sieht eher aus wie Schema als Lisp.
Scheme ist ein Lisp.
Scheme ist ein Lisp.
InformationsquelleAutor user272483 | 2010-03-29
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine rekursive version der Kreuzung anstelle der union.
InformationsquelleAutor tbischel
Ich glaube, ich sehe dein problem. Es gibt zwei Möglichkeiten zum hinzufügen eines Elements zu einer Liste.
Der erste Weg wäre eigentlich hinzufügen:
(Sie werden wahrscheinlich haben, um sich die definition von
do
wenn Sie wirklich wollen, verwenden Sie diese.)Können Sie feststellen, dass das ziemlich hässlich. Das ist, weil niemand wirklich tut es auf diese Weise. Stattdessen müssen Sie erkennen, dass der Aufruf einer Funktion erstellt eine neue variable als gut. Versuchen Sie dies:
Wenn du bist vertraut mit den algorithmen, Sie werden feststellen, dass der code, den ich gerade schrieb ist ziemlich langsam, aber es illustriert den Punkt: in jedem Fall, Sie haben ein wenig Arbeit und dann rufen Sie Ihre Funktion wieder. Wenn Sie Schwierigkeiten haben, zu sehen, warum dies funktioniert, führen Sie diese Funktion, anstatt auf dein Beispiel:
Oh, zu Schießen. Du hast Recht. Diese findet die union. Der Schnittpunkt der Funktion sollte ähnlich sein, obwohl - beginnen Sie einfach mit '() anstelle von liste2 als Ihre Arbeit Liste. (Möglicherweise müssen Sie fügen Sie eine Dritte argument für die Funktion.)
InformationsquelleAutor Noah Lavine
Hier einige vereinfachende elisp:
Diese verhält sich wie die eingebaute Kreuzung für diese einfachen tests:
Sorry, keine Ahnung, ich bin nicht vertraut mit drscheme. Wie gesagt, dies ist elisp. Suchen nur in Ihrem code, müssen Sie verwenden "definieren" anstelle von "defun"?
ja eigentlich defun bei mir nicht funktioniert und ich weiß nicht, wie zu verwenden defun
Der Beispiel-code ist in Emacs Lisp. Es hat viele Gemeinsamkeiten mit dem Schema, und sieht sehr ähnlich, aber es ist eine andere Sprache.
InformationsquelleAutor killdash10
Du bist besser dran mit set-Operationen von srfi-1.
InformationsquelleAutor Alexey B.