2017-10-10 29 views
0

Erstellen habe ich ein paar einfache Fragen, damit sie zusammen Ich stelle:eine Reihe von Zahlen in Red Sprache

  1. Was ist der beste Weg, um eine Reihe von Zahlen zu erstellen. Nacharbeiten funktioniert aber in einigen Sprachen eine einfachere Methode wie 1:10?

    myseries: []

    repeat i 10 [append myseries i]

    print myseries

(1a. Warum ist oben Code nicht auf dieser Seite üblichen Codeblock zu machen?)

  1. In ähnlicher Weise, was ist der beste Weg, um eine Reihe von 10 Elementen, alle initii zu erstellen auf 0 oder ""? Muss ich dort auch repeat i 10 oder loop 10 und serienmäßig append eine anfänglich blanke Serie verwenden?

  2. Soll ich beim Erstellen der Serie auch die Anzahl der Elemente wie im folgenden Code angeben? Was ist der Nachteil, dies nicht zu tun?

    myseries: make block! 10

Danke für Ihre Hilfe.

+0

Dies ist definitiv eines der Dinge, die ich denke, sollte einfacher sein, zu tun.Einer der Gründe, warum es nicht bereits so ist, liegt darin, die Daten direkt zu bearbeiten, anstatt vorher eine Serie zu generieren. Dennoch, viele andere Array-Bearbeitungsfunktionen auf meiner Wunschliste –

Antwort

0

1) Ich weiß nicht, über eine bessere Art und Weise zu diesem Zeitpunkt, obwohl auf https://gitter.im/red/... es Diskussionen über eine Reihe Datentyp ist oder für Implementierungen

a) Es macht einen Block. Sie sehen das mit probe myseries. Was erwartest du?

2) >> append/dup [] 0 10 == [0 0 0 0 0 0 0 0 0 0]

3) Wenn Sie nicht/Sie initialisieren reservieren den benötigten Speicher, Red hat eine Vermutung, wie viel Speicher benötigt wird. Dies kann mehr als nötig oder weniger sein. Wenn weniger, muss Red einen weiteren Speicherblock zuweisen. Dies kann einige Male passieren, wenn Sie mehr Speicher benötigen. Vielleicht muss es sich auch um Speicherblöcke bewegen, wenn es kontinuierlichen Speicherbedarf hat, aber ich weiß nichts über die verwendete Strategie.

4

1) Meine Präferenz mit COLLECT hier gehen würde:

myseries: collect [repeat i 10 [keep i]] 

2) Siehe ARRAY Funktion:

>> array/initial 10 0 
== [0 0 0 0 0 0 0 0 0 0] 

Sie können auch eine anonyme Funktion übergeben:

>> i: 0 array/initial 10 does [i: i + 1] 
== [1 2 3 4 5 6 7 8 9 10] 

3) Im Allgemeinen ist es ratsam, myseries: make block! 10 (oder nur 0, wenn siz e of block ist unbekannt) um unnötige Fehler zu vermeiden! Siehe To copy or not to copy, that is the question & Is REBOL a Pure Functional Language?

Verwandte Themen