Compare commits

..

15 Commits

Author SHA1 Message Date
Enno
c2859c7eff
Merge bea8f291bc into 01771b39c9 2024-12-18 18:43:40 -07:00
Boris Verkhovskiy
01771b39c9 Lint carriage return 2024-12-18 18:39:21 -07:00
Boris Verkhovskiy
11b91ad5cc Lint bad spaces 2024-12-18 18:28:54 -07:00
Boris Verkhovskiy
89b09faed3 Add space after header symbol 2024-12-18 18:03:42 -07:00
Boris Verkhovskiy
789fffd9f8 Remove zero-width spaces 2024-12-18 18:01:34 -07:00
Boris Verkhovskiy
3ecbf961d3 Remove non-breaking spaces 2024-12-18 17:58:08 -07:00
Boris Verkhovskiy
f888151153 Remove spacing after list markers 2024-12-18 17:17:25 -07:00
Boris Verkhovskiy
755d45e978 [linker] correct indentation 2024-12-18 17:02:09 -07:00
Boris Verkhovskiy
29e880808e [edn/tr] remove Y= 2024-12-18 16:40:06 -07:00
Boris Verkhovskiy
415efbe717 [csharp] correct list indentation
All checks were successful
Trigger site build / deploy (push) Has been skipped
CI / lint (push) Successful in 1m11s
2024-12-18 16:16:26 -07:00
Boris Verkhovskiy
63cb073813 [logtalk/bg] fix list style 2024-12-18 16:10:50 -07:00
Boris Verkhovskiy
f3c55b2fc3 Remove spaces after header 2024-12-18 15:59:50 -07:00
Boris Verkhovskiy
ce7f340d4c Remove spaces around brackets in frontmatter 2024-12-18 15:54:05 -07:00
Boris Verkhovskiy
20b76d188a [stylus] highlight as SCSS 2024-12-18 15:31:51 -07:00
Boris Verkhovskiy
b091a335fd [sass/vi] highlight correctly 2024-12-18 15:31:35 -07:00
69 changed files with 761 additions and 764 deletions

View File

@ -22,7 +22,22 @@ jobs:
- name: Files are UTF-8 - name: Files are UTF-8
run: ./lint/encoding.sh . run: ./lint/encoding.sh .
- name: "No non-breaking spaces"
run: |
if grep -rI --include='*.md' $'\u00A0' .; then
exit 1
fi
- name: "No zero-width spaces"
run: |
if grep -rI --include='*.md' $'\u200B' .; then
exit 1
fi
- name: "No carriage return"
run: |
if grep -rI --include='*.md' $'\u000D' .; then
exit 1
fi
- name: Lint Markdown - name: Lint Markdown
run: mdl . --ignore-front-matter -r MD003,MD011,MD023,MD027,MD028,MD035,MD037,MD038,MD039,MD047 run: mdl . --ignore-front-matter -r MD003,MD005,MD011,MD018,MD019,MD023,MD025,MD027,MD028,MD030,MD035,MD037,MD038,MD039,MD047
- name: Lint frontmatter - name: Lint frontmatter
run: ./lint/frontmatter.py . run: ./lint/frontmatter.py .

View File

@ -15,7 +15,7 @@ The idea turned out very well, and the project is now officially supported by Go
AngularJS is a JavaScript framework. It can be added to an HTML page with a "script" tag. AngularJS is a JavaScript framework. It can be added to an HTML page with a "script" tag.
AngularJS extends HTML attributes with Directives, and binds data to HTML with Expressions. AngularJS extends HTML attributes with Directives, and binds data to HTML with Expressions.
##What You Should Already Know ## What You Should Already Know
Before you study AngularJS, you should have a basic understanding of: Before you study AngularJS, you should have a basic understanding of:

View File

@ -352,7 +352,7 @@ Get familiar with how you can use roles in the simple_apache_role example
``` ```
playbooks/roles/simple_apache_role/ playbooks/roles/simple_apache_role/
├── tasks ├── tasks
   └── main.yml └── main.yml
└── templates └── templates
└── main.yml └── main.yml
``` ```

View File

@ -343,7 +343,7 @@ echo "#helloworld" | tee output.out >/dev/null
rm -v output.out error.err output-and-error.log rm -v output.out error.err output-and-error.log
rm -r tempDir/ # recursively delete rm -r tempDir/ # recursively delete
# You can install the `trash-cli` Python package to have `trash` # You can install the `trash-cli` Python package to have `trash`
# which puts files in the system trash and doesn't delete them directly # which puts files in the system trash and doesn't delete them directly
# see https://pypi.org/project/trash-cli/ if you want to be careful # see https://pypi.org/project/trash-cli/ if you want to be careful
# Commands can be substituted within other commands using $( ): # Commands can be substituted within other commands using $( ):
@ -360,7 +360,7 @@ case "$Variable" in
# List patterns for the conditions you want to meet # List patterns for the conditions you want to meet
0) echo "There is a zero.";; 0) echo "There is a zero.";;
1) echo "There is a one.";; 1) echo "There is a one.";;
*) echo "It is not null.";; # match everything *) echo "It is not null.";; # match everything
esac esac
# `for` loops iterate for as many arguments given: # `for` loops iterate for as many arguments given:
@ -462,8 +462,8 @@ cut -d ',' -f 1 file.txt
# replaces every occurrence of 'okay' with 'great' in file.txt # replaces every occurrence of 'okay' with 'great' in file.txt
# (regex compatible) # (regex compatible)
sed -i 's/okay/great/g' file.txt sed -i 's/okay/great/g' file.txt
# be aware that this -i flag means that file.txt will be changed # be aware that this -i flag means that file.txt will be changed
# -i or --in-place erase the input file (use --in-place=.backup to keep a back-up) # -i or --in-place erase the input file (use --in-place=.backup to keep a back-up)
# print to stdout all lines of file.txt which match some regex # print to stdout all lines of file.txt which match some regex
# The example prints lines which begin with "foo" and end in "bar" # The example prints lines which begin with "foo" and end in "bar"

View File

@ -4,7 +4,6 @@ contributors:
- ["Paulo Moura", "http://github.com/pmoura"] - ["Paulo Moura", "http://github.com/pmoura"]
translators: translators:
- ["vsraptor", "https://github.com/vsraptor"] - ["vsraptor", "https://github.com/vsraptor"]
--- ---
Logtalk е обектно-ориентиран (ОО) модерен логически език за програмиране, които разширява Prolog с възможности за капсулиране (еncapsulation) и многократно използване на кода без да компрометира декларативните възможности на езика. Logtalk е имплементиран така че да може да бъде адапртиран към всеки стандартен Prolog като back-end компилатор, тоест е напълно прозрачен за нормална Prolog програма. Logtalk е обектно-ориентиран (ОО) модерен логически език за програмиране, които разширява Prolog с възможности за капсулиране (еncapsulation) и многократно използване на кода без да компрометира декларативните възможности на езика. Logtalk е имплементиран така че да може да бъде адапртиран към всеки стандартен Prolog като back-end компилатор, тоест е напълно прозрачен за нормална Prolog програма.
@ -23,9 +22,9 @@ Logtalk използва стандартен Prolog синтакс, с мини
Операторите които Logtalk добавя към Prolog са : Операторите които Logtalk добавя към Prolog са :
::/2 - изпраща саобщение до обект (аналогично на метод в стандартните ООП езици) * `::/2` - изпраща саобщение до обект (аналогично на метод в стандартните ООП езици)
::/1 - изпраща саобщение до себе си (self) (тоест до обекта който е получил съобщението което обработваме в момента) * `::/1` - изпраща саобщение до себе си (*self*) (тоест до обекта който е получил съобщението което обработваме в момента)
^^/1 - super call (изпраща саобщение до наследен или импортиран предикат(predicate)) * `^^/1` - *super* call (изпраща саобщение до наследен или импортиран предикат(predicate))
## Entities and roles (Субекти и роли) ## Entities and roles (Субекти и роли)

View File

@ -186,7 +186,7 @@ organizations.
THE FULL NAME IS: BOB GIBBERISH COBB THE FULL NAME IS: BOB GIBBERISH COBB
``` ```
##Ready For More? ## Further reading
* [GnuCOBOL](https://sourceforge.net/projects/open-cobol/) * [GnuCOBOL](https://sourceforge.net/projects/open-cobol/)

View File

@ -610,7 +610,7 @@ for nasobek in nasobicka_2([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]):
break break
# Funkce range() je také generátor - vytváření seznamu 900000000 prvků by zabralo # Funkce range() je také generátor - vytváření seznamu 900000000 prvků by zabralo
# hodně času i paměti, proto se místo toho čísla generují postupně. # hodně času i paměti, proto se místo toho čísla generují postupně.
for nasobek in nasobicka_2(range(900000000)): for nasobek in nasobicka_2(range(900000000)):
# Vypíše postupně: "Zpracovávám číslo 1", ..., "Zpracovávám číslo 5" # Vypíše postupně: "Zpracovávám číslo 1", ..., "Zpracovávám číslo 5"
if nasobek >= 10: if nasobek >= 10:

View File

@ -1314,20 +1314,21 @@ namespace Csharp7
``` ```
## Topics Not Covered ## Topics Not Covered
✨ New, 👍 Old, 🎈 LTS, 🔥 Cross-platform, 🎁 Windows-only ✨ New, 👍 Old, 🎈 LTS, 🔥 Cross-platform, 🎁 Windows-only
* Attributes * Attributes
* Asynchronous Programming * Asynchronous Programming
* Web Development * Web Development
* ASP.NET Core ✨ * ASP.NET Core ✨
* Desktop Development * Desktop Development
* Windows Presentation Foundation 👍 🎈 🎁 * Windows Presentation Foundation 👍 🎈 🎁
* Universal Windows Platform ✨ 🎁 * Universal Windows Platform ✨ 🎁
* Uno Platform 🔥 ✨ * Uno Platform 🔥 ✨
* WinForms 👍 🎈 🎁 * WinForms 👍 🎈 🎁
* Avalonia 🔥 ✨ * Avalonia 🔥 ✨
* WinUI ✨ 🎁 * WinUI ✨ 🎁
@ -1335,16 +1336,14 @@ namespace Csharp7
* Xamarin.Forms 👍 * Xamarin.Forms 👍
* MAUI ✨ * MAUI ✨
## Further Reading ## Further Reading
* [C# language reference](https://docs.microsoft.com/dotnet/csharp/language-reference/) * [C# language reference](https://docs.microsoft.com/dotnet/csharp/language-reference/)
* [Learn .NET](https://dotnet.microsoft.com/learn) * [Learn .NET](https://dotnet.microsoft.com/learn)
* [C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions) * [C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions)
* [DotNetPerls](http://www.dotnetperls.com) * [DotNetPerls](http://www.dotnetperls.com)
* [C# in Depth](http://manning.com/skeet2) * [C# in Depth](http://manning.com/skeet2)
* [Programming C# 5.0](http://shop.oreilly.com/product/0636920024064.do) * [Programming C# 5.0](http://shop.oreilly.com/product/0636920024064.do)
* [LINQ Pocket Reference](http://shop.oreilly.com/product/9780596519254.do) * [LINQ Pocket Reference](http://shop.oreilly.com/product/9780596519254.do)
* [Windows Forms Programming in C#](http://www.amazon.com/Windows-Forms-Programming-Chris-Sells/dp/0321116208) * [Windows Forms Programming in C#](http://www.amazon.com/Windows-Forms-Programming-Chris-Sells/dp/0321116208)
* [freeCodeCamp - C# Tutorial for Beginners](https://www.youtube.com/watch?v=GhQdlIFylQ8) * [freeCodeCamp - C# Tutorial for Beginners](https://www.youtube.com/watch?v=GhQdlIFylQ8)

4
css.md
View File

@ -224,13 +224,13 @@ body {
/* Nest style rule inside another (CSS 3) */ /* Nest style rule inside another (CSS 3) */
.main { .main {
.bgred { /* same as: .main .bgred { } */ .bgred { /* same as: .main .bgred { } */
background: red; background: red;
} }
& .bggreen { /* same as: .main .bggreen { } */ & .bggreen { /* same as: .main .bggreen { } */
background: green; background: green;
} }
&.bgblue { /* (without space) same as: .main.bgblue { } */ &.bgblue { /* (without space) same as: .main.bgblue { } */
background: blue; background: blue;
} }
} }

10
cue.md
View File

@ -488,12 +488,12 @@ To make it concrete, consider the following:
``` ```
mymodule mymodule
├── config ├── config
   ├── a.cue ├── a.cue
   └── b.cue └── b.cue
├── cue.mod ├── cue.mod
   ├── module.cue ├── module.cue
   ├── pkg ├── pkg
   └── usr └── usr
└── main.cue └── main.cue
``` ```

View File

@ -182,5 +182,5 @@ KTHXBYE
## Weiterführende Informationen: ## Weiterführende Informationen:
- [LCI compiler](https://github.com/justinmeza/lci) - [LCI compiler](https://github.com/justinmeza/lci)
- [Official spec](https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md) - [Official spec](https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md)

View File

@ -461,18 +461,18 @@ class Human(object):
return "*grunt*" return "*grunt*"
# Eine Eigenschaft (Property) ist wie ein Getter. # Eine Eigenschaft (Property) ist wie ein Getter.
    # Es verwandelt die Methode age() in ein schreibgeschütztes Attribut mit demselben Namen. # Es verwandelt die Methode age() in ein schreibgeschütztes Attribut mit demselben Namen.
    # Es ist jedoch nicht nötig, triviale Getter und Setter in Python zu schreiben. # Es ist jedoch nicht nötig, triviale Getter und Setter in Python zu schreiben.
@property @property
def age(self): def age(self):
return self._age return self._age
    # Damit kann die Eigenschaft festgelegt werden # Damit kann die Eigenschaft festgelegt werden
@age.setter @age.setter
def age(self, age): def age(self, age):
self._age = age self._age = age
    # Damit kann die Eigenschaft gelöscht werden # Damit kann die Eigenschaft gelöscht werden
@age.deleter @age.deleter
def age(self): def age(self):
del self._age del self._age
@ -561,7 +561,7 @@ class Superhero(Human):
# Mit der Funktion "super" können Sie auf die Methoden der übergeordneten Klasse # Mit der Funktion "super" können Sie auf die Methoden der übergeordneten Klasse
# zugreifen, die vom untergeordneten Objekt überschrieben werden, # zugreifen, die vom untergeordneten Objekt überschrieben werden,
# in diesem Fall die Methode __init__. # in diesem Fall die Methode __init__.
        # Dies ruft den Konstruktor der übergeordneten Klasse auf: # Dies ruft den Konstruktor der übergeordneten Klasse auf:
super().__init__(name) super().__init__(name)
# überschreiben der "sing" Methode # überschreiben der "sing" Methode
@ -583,7 +583,7 @@ if __name__ == '__main__':
print('I am a superhero') print('I am a superhero')
# Die Reihenfolge der Methodenauflösung (MRO = Method Resolution Order) anzeigen, die sowohl von getattr() als auch von super() verwendet wird. # Die Reihenfolge der Methodenauflösung (MRO = Method Resolution Order) anzeigen, die sowohl von getattr() als auch von super() verwendet wird.
    # Dieses Attribut ist dynamisch und kann aktualisiert werden. # Dieses Attribut ist dynamisch und kann aktualisiert werden.
print(Superhero.__mro__) # => (<class '__main__.Superhero'>, print(Superhero.__mro__) # => (<class '__main__.Superhero'>,
# => <class 'human.Human'>, <class 'object'>) # => <class 'human.Human'>, <class 'object'>)

View File

@ -523,7 +523,7 @@ next(our_iterator) # => "one"
next(our_iterator) # => "two" next(our_iterator) # => "two"
next(our_iterator) # => "three" next(our_iterator) # => "three"
# Όταν ο iterator έχει επιστρέψει όλα τα δεδομένα του, προκαλεί ένα μια εξαίρεση StopIteration. # Όταν ο iterator έχει επιστρέψει όλα τα δεδομένα του, προκαλεί ένα μια εξαίρεση StopIteration.
next(our_iterator) # προκαλεί StopIteration next(our_iterator) # προκαλεί StopIteration
# Μπορείς να πάρεις όλα τα αντικείμενα ενός iteratior καλώντας list() πάνω του. # Μπορείς να πάρεις όλα τα αντικείμενα ενός iteratior καλώντας list() πάνω του.

View File

@ -280,7 +280,7 @@ foo(bar(tempObjectFun()))
void constReferenceTempObjectFun() { void constReferenceTempObjectFun() {
// ConstRef obtiene el objeto temporal, y es válido hasta el final de esta // ConstRef obtiene el objeto temporal, y es válido hasta el final de esta
  // función. // función.
const string& constRef = tempObjectFun(); const string& constRef = tempObjectFun();
... ...
} }
@ -328,10 +328,10 @@ public:
Dog(); Dog();
// Declaraciones de funciones de la clase (implementaciones a seguir) // Declaraciones de funciones de la clase (implementaciones a seguir)
    // Nota que usamos std::string aquí en lugar de colocar // Nota que usamos std::string aquí en lugar de colocar
    // using namespace std; // using namespace std;
    // arriba. // arriba.
    // Nunca ponga una declaración "using namespace" en un encabezado. // Nunca ponga una declaración "using namespace" en un encabezado.
void setName(const std::string& dogsName); void setName(const std::string& dogsName);
void setWeight(int dogsWeight); void setWeight(int dogsWeight);
@ -471,7 +471,7 @@ public:
Point& operator+=(const Point& rhs); Point& operator+=(const Point& rhs);
// También tendría sentido añadir los operadores - y -=, // También tendría sentido añadir los operadores - y -=,
    // pero vamos a omitirlos por razones de brevedad. // pero vamos a omitirlos por razones de brevedad.
}; };
Point Point::operator+(const Point& rhs) const Point Point::operator+(const Point& rhs) const

View File

@ -202,7 +202,7 @@ chau
``` ```
##Listo Para Mas? ## Listo Para Mas?
* [README](https://git.sr.ht/~maleza/curto/tree/curto/item/README) * [README](https://git.sr.ht/~maleza/curto/tree/curto/item/README)
* [GLOSARIO](https://git.sr.ht/~maleza/curto/tree/curto/item/GLOSARIO) * [GLOSARIO](https://git.sr.ht/~maleza/curto/tree/curto/item/GLOSARIO)

View File

@ -191,6 +191,6 @@ name get-global . ! "Bob"
[ 2 + ] \ - suffix ! Quotation [ 2 + - ] [ 2 + ] \ - suffix ! Quotation [ 2 + - ]
``` ```
##Listo para más? ## Listo para más?
* [Documentación de Factor](http://docs.factorcode.org/content/article-help.home.html) * [Documentación de Factor](http://docs.factorcode.org/content/article-help.home.html)

View File

@ -216,7 +216,7 @@ page
\ bye \ bye
``` ```
##Listo Para Mas? ## Listo Para Mas?
* [Starting Forth](http://www.forth.com/starting-forth/) * [Starting Forth](http://www.forth.com/starting-forth/)
* [Simple Forth](http://www.murphywong.net/hello/simple.htm) * [Simple Forth](http://www.murphywong.net/hello/simple.htm)

View File

@ -248,7 +248,7 @@ module EjemploDeSecuencia =
let secuencia1 = seq { yield "a"; yield "b" } let secuencia1 = seq { yield "a"; yield "b" }
// Las secuencias pueden usar yield y // Las secuencias pueden usar yield y
    // puede contener subsecuencias // puede contener subsecuencias
let extranio = seq { let extranio = seq {
// "yield" agrega un elemento // "yield" agrega un elemento
yield 1; yield 2; yield 1; yield 2;
@ -262,7 +262,7 @@ module EjemploDeSecuencia =
extranio |> Seq.toList extranio |> Seq.toList
// Las secuencias se pueden crear usando "unfold" // Las secuencias se pueden crear usando "unfold"
    // Esta es la secuencia de fibonacci // Esta es la secuencia de fibonacci
let fib = Seq.unfold (fun (fst,snd) -> let fib = Seq.unfold (fun (fst,snd) ->
Some(fst + snd, (snd, fst + snd))) (0,1) Some(fst + snd, (snd, fst + snd))) (0,1)
@ -278,8 +278,8 @@ module EejemploDeTipoDeDatos =
// Todos los datos son inmutables por defecto // Todos los datos son inmutables por defecto
     // las tuplas son tipos anónimos simples y rápidos // las tuplas son tipos anónimos simples y rápidos
     // - Usamos una coma para crear una tupla // - Usamos una coma para crear una tupla
let dosTuplas = 1,2 let dosTuplas = 1,2
let tresTuplas = "a",2,true let tresTuplas = "a",2,true
@ -301,7 +301,7 @@ module EejemploDeTipoDeDatos =
// ------------------------------------ // ------------------------------------
// Los tipos de unión (o variantes) tienen un conjunto de elección // Los tipos de unión (o variantes) tienen un conjunto de elección
     // Solo un caso puede ser válido a la vez. // Solo un caso puede ser válido a la vez.
// ------------------------------------ // ------------------------------------
// Usamos "type" con barra/pipe para definir una unión estándar // Usamos "type" con barra/pipe para definir una unión estándar
@ -326,7 +326,7 @@ module EejemploDeTipoDeDatos =
// ------------------------------------ // ------------------------------------
// Los tipos se pueden combinar recursivamente de formas complejas // Los tipos se pueden combinar recursivamente de formas complejas
    // sin tener que crear subclases // sin tener que crear subclases
type Empleado = type Empleado =
| Trabajador of Persona | Trabajador of Persona
| Gerente of Empleado lista | Gerente of Empleado lista
@ -349,9 +349,9 @@ module EejemploDeTipoDeDatos =
| DireccionDeCorreoInvalido direccion -> () // no enviar | DireccionDeCorreoInvalido direccion -> () // no enviar
// Combinar juntos, los tipos de unión y tipos de registro // Combinar juntos, los tipos de unión y tipos de registro
     // ofrece una base excelente para el diseño impulsado por el dominio. // ofrece una base excelente para el diseño impulsado por el dominio.
     // Puedes crear cientos de pequeños tipos que reflejarán fielmente // Puedes crear cientos de pequeños tipos que reflejarán fielmente
     // el dominio. // el dominio.
type ArticuloDelCarrito = { CodigoDelProducto: string; Cantidad: int } type ArticuloDelCarrito = { CodigoDelProducto: string; Cantidad: int }
type Pago = Pago of float type Pago = Pago of float
@ -368,17 +368,17 @@ module EejemploDeTipoDeDatos =
// ------------------------------------ // ------------------------------------
// Los tipos nativos tienen el comportamiento más útil "listo para usar", sin ningún código para agregar. // Los tipos nativos tienen el comportamiento más útil "listo para usar", sin ningún código para agregar.
     // * Inmutabilidad // * Inmutabilidad
     // * Bonita depuración de impresión // * Bonita depuración de impresión
     // * Igualdad y comparación // * Igualdad y comparación
     // * Serialización // * Serialización
     // La impresión bonita se usa con %A // La impresión bonita se usa con %A
printfn "dosTuplas=%A,\nPersona=%A,\nTemp=%A,\nEmpleado=%A" printfn "dosTuplas=%A,\nPersona=%A,\nTemp=%A,\nEmpleado=%A"
dosTuplas persona1 temp1 trabajador dosTuplas persona1 temp1 trabajador
// La igualdad y la comparación son innatas // La igualdad y la comparación son innatas
     // Aquí hay un ejemplo con tarjetas. // Aquí hay un ejemplo con tarjetas.
type JuegoDeCartas = Trebol | Diamante | Espada | Corazon type JuegoDeCartas = Trebol | Diamante | Espada | Corazon
type Rango = Dos | Tres | Cuatro | Cinco | Seis | Siete | Ocho type Rango = Dos | Tres | Cuatro | Cinco | Seis | Siete | Ocho
| Nueve | Diez | Jack | Reina | Rey | As | Nueve | Diez | Jack | Reina | Rey | As
@ -398,11 +398,11 @@ module EejemploDeTipoDeDatos =
module EjemplosDePatronesActivos = module EjemplosDePatronesActivos =
// F# tiene un tipo particular de coincidencia de patrón llamado "patrones activos" // F# tiene un tipo particular de coincidencia de patrón llamado "patrones activos"
    // donde el patrón puede ser analizado o detectado dinámicamente. // donde el patrón puede ser analizado o detectado dinámicamente.
    // "clips de banana" es la sintaxis de los patrones activos // "clips de banana" es la sintaxis de los patrones activos
    // por ejemplo, definimos un patrón "activo" para que coincida con los tipos de "caracteres" ... // por ejemplo, definimos un patrón "activo" para que coincida con los tipos de "caracteres" ...
let (|Digito|Latra|EspacioEnBlanco|Otros|) ch = let (|Digito|Latra|EspacioEnBlanco|Otros|) ch =
if System.Char.IsDigit(ch) then Digito if System.Char.IsDigit(ch) then Digito
else if System.Char.IsLetter(ch) then Letra else if System.Char.IsLetter(ch) then Letra
@ -425,7 +425,7 @@ module EjemplosDePatronesActivos =
// ----------------------------------------- // -----------------------------------------
// Puede crear un patrón de coincidencia parcial también // Puede crear un patrón de coincidencia parcial también
    // Solo usamos un guión bajo en la definición y devolvemos Some si coincide. // Solo usamos un guión bajo en la definición y devolvemos Some si coincide.
let (|MultDe3|_|) i = if i % 3 = 0 then Some MultDe3 else None let (|MultDe3|_|) i = if i % 3 = 0 then Some MultDe3 else None
let (|MultDe5|_|) i = if i % 5 = 0 then Some MultDe5 else None let (|MultDe5|_|) i = if i % 5 = 0 then Some MultDe5 else None
@ -447,7 +447,7 @@ module EjemplosDePatronesActivos =
module EjemploDeAlgoritmo = module EjemploDeAlgoritmo =
// F# tiene una alta relación señal / ruido, lo que permite leer el código // F# tiene una alta relación señal / ruido, lo que permite leer el código
    // casi como un algoritmo real // casi como un algoritmo real
// ------ Ejemplo: definir una función sumaDeCuadrados ------ // ------ Ejemplo: definir una función sumaDeCuadrados ------
let sumaDeCuadrados n = let sumaDeCuadrados n =
@ -464,7 +464,7 @@ module EjemploDeAlgoritmo =
// Si la lista está vacía // Si la lista está vacía
| [] -> | [] ->
[] // devolvemos una lista vacía [] // devolvemos una lista vacía
       // si la lista no está vacía // si la lista no está vacía
| primerElemento::otrosElementos -> // tomamos el primer elemento | primerElemento::otrosElementos -> // tomamos el primer elemento
let elementosMasPequenios = // extraemos los elementos más pequeños let elementosMasPequenios = // extraemos los elementos más pequeños
otrosElementos // tomamos el resto otrosElementos // tomamos el resto
@ -487,9 +487,9 @@ module EjemploDeAlgoritmo =
module AsyncExample = module AsyncExample =
// F# incluye características para ayudar con el código asíncrono // F# incluye características para ayudar con el código asíncrono
    // sin conocer la "pirámide del destino" // sin conocer la "pirámide del destino"
    // //
    // El siguiente ejemplo descarga una secuencia de página web en paralelo. // El siguiente ejemplo descarga una secuencia de página web en paralelo.
open System.Net open System.Net
open System open System
@ -531,9 +531,9 @@ module AsyncExample =
module EjemploCompatibilidadNet = module EjemploCompatibilidadNet =
// F# puede hacer casi cualquier cosa que C# pueda hacer, y se ajusta // F# puede hacer casi cualquier cosa que C# pueda hacer, y se ajusta
    // perfectamente con bibliotecas .NET o Mono. // perfectamente con bibliotecas .NET o Mono.
  // ------- Trabaja con las funciones de las bibliotecas existentes ------- // ------- Trabaja con las funciones de las bibliotecas existentes -------
let (i1success,i1) = System.Int32.TryParse("123"); let (i1success,i1) = System.Int32.TryParse("123");
if i1success then printfn "convertido como %i" i1 else printfn "conversion fallida" if i1success then printfn "convertido como %i" i1 else printfn "conversion fallida"
@ -559,7 +559,7 @@ module EjemploCompatibilidadNet =
// ------- Código orientado a objetos ------- // ------- Código orientado a objetos -------
// F# es también un verdadero lenguaje OO. // F# es también un verdadero lenguaje OO.
    // Admite clases, herencia, métodos virtuales, etc. // Admite clases, herencia, métodos virtuales, etc.
// interfaz de tipo genérico // interfaz de tipo genérico
type IEnumerator<'a> = type IEnumerator<'a> =

256
es/hy.md
View File

@ -6,162 +6,162 @@ translators:
- ["Roberto R", "https://github.com/rrodriguze"] - ["Roberto R", "https://github.com/rrodriguze"]
--- ---
Hy es un lenguaje de Lisp escrito sobre Python. Esto es posible convirtiendo Hy es un lenguaje de Lisp escrito sobre Python. Esto es posible convirtiendo
código Hy en un árbol abstracto de Python (ast). Por lo que, esto permite a código Hy en un árbol abstracto de Python (ast). Por lo que, esto permite a
Hy llamar a código Python nativo y viceversa. Hy llamar a código Python nativo y viceversa.
```hylang ```hylang
;; Esto es una intrucción muy básica a Hy, como la del siguiente enlace ;; Esto es una intrucción muy básica a Hy, como la del siguiente enlace
;; https://hylang.org/try-hy ;; https://hylang.org/try-hy
;; ;;
; Comentarios usando punto y coma, como en otros Lisps ; Comentarios usando punto y coma, como en otros Lisps
;; Nociones básicas de expresiones ;; Nociones básicas de expresiones
; Los programas List están hechos de expresiones simbólicas como la siguiente ; Los programas List están hechos de expresiones simbólicas como la siguiente
(some-function args) (some-function args)
; ahora el esencial "Hola Mundo" ; ahora el esencial "Hola Mundo"
(print "hello world") (print "hello world")
;; Tipos de datos simples ;; Tipos de datos simples
; Todos los tipos de datos simples son exactamente semejantes a sus homólogos ; Todos los tipos de datos simples son exactamente semejantes a sus homólogos
; en Python ; en Python
42 ; => 42 42 ; => 42
3.14 ; => 3.14 3.14 ; => 3.14
True ; => True True ; => True
4+10j ; => (4+10j) un número complejo 4+10j ; => (4+10j) un número complejo
; Vamos a comenzar con un poco de arimética simple ; Vamos a comenzar con un poco de arimética simple
(+ 4 1) ;=> 5 (+ 4 1) ;=> 5
; el operador es aplicado a todos los argumentos, como en otros Lisps ; el operador es aplicado a todos los argumentos, como en otros Lisps
(+ 4 1 2 3) ;=> 10 (+ 4 1 2 3) ;=> 10
(- 2 1) ;=> 1 (- 2 1) ;=> 1
(* 4 2) ;=> 8 (* 4 2) ;=> 8
(/ 4 1) ;=> 4 (/ 4 1) ;=> 4
(% 4 2) ;=> 0 o operador módulo (% 4 2) ;=> 0 o operador módulo
; la exponenciación es representada por el operador ** como Python ; la exponenciación es representada por el operador ** como Python
(** 3 2) ;=> 9 (** 3 2) ;=> 9
; las funciones anidadas funcionan como lo esperado ; las funciones anidadas funcionan como lo esperado
(+ 2 (* 4 2)) ;=> 10 (+ 2 (* 4 2)) ;=> 10
; también los operadores lógicos igual o no igual se comportan como se espera ; también los operadores lógicos igual o no igual se comportan como se espera
(= 5 4) ;=> False (= 5 4) ;=> False
(not (= 5 4)) ;=> True (not (= 5 4)) ;=> True
;; variables ;; variables
; las variables se configuran usando SETV, los nombres de las variables pueden ; las variables se configuran usando SETV, los nombres de las variables pueden
; usar utf-8, excepto for ()[]{}",'`;#| ; usar utf-8, excepto for ()[]{}",'`;#|
(setv a 42) (setv a 42)
(setv π 3.14159) (setv π 3.14159)
(def *foo* 42) (def *foo* 42)
;; otros tipos de datos de almacenamiento ;; otros tipos de datos de almacenamiento
; strings, lists, tuples & dicts ; strings, lists, tuples & dicts
; estos son exactamente los mismos tipos de almacenamiento en Python ; estos son exactamente los mismos tipos de almacenamiento en Python
"hello world" ;=> "hello world" "hello world" ;=> "hello world"
; las operaciones de cadena funcionan de manera similar en Python ; las operaciones de cadena funcionan de manera similar en Python
(+ "hello " "world") ;=> "hello world" (+ "hello " "world") ;=> "hello world"
; Las listas se crean usando [], la indexación comienza en 0 ; Las listas se crean usando [], la indexación comienza en 0
(setv mylist [1 2 3 4]) (setv mylist [1 2 3 4])
; las tuplas son estructuras de datos inmutables ; las tuplas son estructuras de datos inmutables
(setv mytuple (, 1 2)) (setv mytuple (, 1 2))
; los diccionarios son pares de valor-clave ; los diccionarios son pares de valor-clave
(setv dict1 {"key1" 42 "key2" 21}) (setv dict1 {"key1" 42 "key2" 21})
; :nombre se puede usar para definir palabras clave en Hy que se pueden usar para claves ; :nombre se puede usar para definir palabras clave en Hy que se pueden usar para claves
(setv dict2 {:key1 41 :key2 20}) (setv dict2 {:key1 41 :key2 20})
; usar 'get' para obtener un elemento en un índice/key ; usar 'get' para obtener un elemento en un índice/key
(get mylist 1) ;=> 2 (get mylist 1) ;=> 2
(get dict1 "key1") ;=> 42 (get dict1 "key1") ;=> 42
; Alternativamente, si se usan palabras clave que podrían llamarse directamente ; Alternativamente, si se usan palabras clave que podrían llamarse directamente
(:key1 dict2) ;=> 41 (:key1 dict2) ;=> 41
;; funciones y otras estructuras de programa ;; funciones y otras estructuras de programa
; las funciones son definidas usando defn, o el último sexp se devuelve por defecto ; las funciones son definidas usando defn, o el último sexp se devuelve por defecto
(defn greet [name] (defn greet [name]
  "A simple greeting" ; un docstring opcional "A simple greeting" ; un docstring opcional
  (print "hello " name)) (print "hello " name))
(greet "bilbo") ;=> "hello bilbo" (greet "bilbo") ;=> "hello bilbo"
; las funciones pueden tener argumentos opcionales, así como argumentos-clave ; las funciones pueden tener argumentos opcionales, así como argumentos-clave
(defn foolists [arg1 &optional [arg2 2]] (defn foolists [arg1 &optional [arg2 2]]
  [arg1 arg2]) [arg1 arg2])
(foolists 3) ;=> [3 2] (foolists 3) ;=> [3 2]
(foolists 10 3) ;=> [10 3] (foolists 10 3) ;=> [10 3]
; las funciones anonimas son creadas usando constructores 'fn' y 'lambda' ; las funciones anonimas son creadas usando constructores 'fn' y 'lambda'
; que son similares a 'defn' ; que son similares a 'defn'
(map (fn [x] (* x x)) [1 2 3 4]) ;=> [1 4 9 16] (map (fn [x] (* x x)) [1 2 3 4]) ;=> [1 4 9 16]
;; operaciones de secuencia ;; operaciones de secuencia
; Hy tiene algunas utilidades incluidas para operaciones de secuencia, etc. ; Hy tiene algunas utilidades incluidas para operaciones de secuencia, etc.
; recuperar el primer elemento usando 'first' o 'car' ; recuperar el primer elemento usando 'first' o 'car'
(setv mylist [1 2 3 4]) (setv mylist [1 2 3 4])
(setv mydict {"a" 1 "b" 2}) (setv mydict {"a" 1 "b" 2})
(first mylist) ;=> 1 (first mylist) ;=> 1
; corte listas usando 'cut' ; corte listas usando 'cut'
(cut mylist 1 3) ;=> [2 3] (cut mylist 1 3) ;=> [2 3]
; obtener elementos de una lista o dict usando 'get' ; obtener elementos de una lista o dict usando 'get'
(get mylist 1) ;=> 2 (get mylist 1) ;=> 2
(get mydict "b") ;=> 2 (get mydict "b") ;=> 2
; la lista de indexación comienza a partir de 0, igual que en Python ; la lista de indexación comienza a partir de 0, igual que en Python
; assoc puede definir elementos clave/índice ; assoc puede definir elementos clave/índice
(assoc mylist 2 10) ; crear mylist [1 2 10 4] (assoc mylist 2 10) ; crear mylist [1 2 10 4]
(assoc mydict "c" 3) ; crear mydict {"a" 1 "b" 2 "c" 3} (assoc mydict "c" 3) ; crear mydict {"a" 1 "b" 2 "c" 3}
; hay muchas otras funciones que hacen que trabajar con secuencias sea ; hay muchas otras funciones que hacen que trabajar con secuencias sea
; entretenido ; entretenido
;; Python interop ;; Python interop
;; los import funcionan exactamente como en Python ;; los import funcionan exactamente como en Python
(import datetime) (import datetime)
(import functools [partial reduce]) ; importa fun1 e fun2 del module1 (import functools [partial reduce]) ; importa fun1 e fun2 del module1
(import matplotlib.pyplot :as plt) ; haciendo una importación en foo como en bar (import matplotlib.pyplot :as plt) ; haciendo una importación en foo como en bar
; todos los métodos de Python incluídos etc. son accesibles desde Hy ; todos los métodos de Python incluídos etc. son accesibles desde Hy
; a.foo(arg) is called as (.foo a arg) ; a.foo(arg) is called as (.foo a arg)
(.split (.strip "hello world  ")) ;=> ["hello" "world"] (.split (.strip "hello world ")) ;=> ["hello" "world"]
;; Condicionales ;; Condicionales
; (if condition (body-if-true) (body-if-false) ; (if condition (body-if-true) (body-if-false)
(if (= passcode "moria") (if (= passcode "moria")
  (print "welcome") (print "welcome")
  (print "Speak friend, and Enter!")) (print "Speak friend, and Enter!"))
; anidar múltiples cláusulas 'if else if' con condiciones ; anidar múltiples cláusulas 'if else if' con condiciones
(cond (cond
 (= someval 42) (print "Life, universe and everything else!") (= someval 42) (print "Life, universe and everything else!")
 (> someval 42) (print "val too large") (> someval 42) (print "val too large")
 (< someval 42) (print "val too small")) (< someval 42) (print "val too small"))
; declaraciones de grupo con 'do', son ejecutadas secuencialmente ; declaraciones de grupo con 'do', son ejecutadas secuencialmente
; formas como defn tienen un 'do' implícito ; formas como defn tienen un 'do' implícito
(do (do
 (setv someval 10) (setv someval 10)
 (print "someval is set to " someval)) ;=> 10 (print "someval is set to " someval)) ;=> 10
; crear enlaces léxicos con 'let', todas las variables definidas de esta manera ; crear enlaces léxicos con 'let', todas las variables definidas de esta manera
; tienen alcance local ; tienen alcance local
(let [[nemesis {"superman" "lex luther" (let [[nemesis {"superman" "lex luther"
                "sherlock" "moriarty" "sherlock" "moriarty"
                "seinfeld" "newman"}]] "seinfeld" "newman"}]]
  (for [(, h v) (.items nemesis)] (for [(, h v) (.items nemesis)]
    (print (.format "{0}'s nemesis was {1}" h v)))) (print (.format "{0}'s nemesis was {1}" h v))))
;; clases ;; clases
; las clases son definidas de la siguiente manera ; las clases son definidas de la siguiente manera
(defclass Wizard [object] (defclass Wizard [object]
  (defn __init__ [self spell] (defn __init__ [self spell]
    (setv self.spell spell)) (setv self.spell spell))
  (defn get-spell [self] (defn get-spell [self]
    self.spell)) self.spell))
``` ```
### Otras lecturas ### Otras lecturas
Este tutorial apenas es una introducción básica para Hy/Lisp/Python. Este tutorial apenas es una introducción básica para Hy/Lisp/Python.
Docs Hy: [https://hylang.org/hy/doc](https://hylang.org/hy/doc) Docs Hy: [https://hylang.org/hy/doc](https://hylang.org/hy/doc)
Repo Hy en GitHub: [https://github.com/hylang/hy](https://github.com/hylang/hy) Repo Hy en GitHub: [https://github.com/hylang/hy](https://github.com/hylang/hy)
Acceso a freenode irc con #hy, hashtag en twitter: #hylang Acceso a freenode irc con #hy, hashtag en twitter: #hylang

View File

@ -36,7 +36,7 @@ fun main(args: Array<String>) {
/* /*
En la mayoría de los casos, Kotlin puede determinar cuál es el tipo de una variable, En la mayoría de los casos, Kotlin puede determinar cuál es el tipo de una variable,
de tal manera que no tenemos que especificarlo explícitamente cada vez. de tal manera que no tenemos que especificarlo explícitamente cada vez.
    Podemos declarar explícitamente el tipo de una variable así: Podemos declarar explícitamente el tipo de una variable así:
*/ */
val foo: Int = 7 val foo: Int = 7
@ -59,7 +59,7 @@ fun main(args: Array<String>) {
/* /*
Una cadena está delimitada por comillas triple ("""). Una cadena está delimitada por comillas triple (""").
    Estas cadenas pueden contener saltos de línea y otros caracteres. Estas cadenas pueden contener saltos de línea y otros caracteres.
*/ */
val fooRawString = """ val fooRawString = """
fun helloWorld(val name : String) { fun helloWorld(val name : String) {
@ -70,7 +70,7 @@ fun main(args: Array<String>) {
/* /*
Las cadenas pueden contener interpolación de cadenas. Las cadenas pueden contener interpolación de cadenas.
    La interpolación de cadenas comienza con un signo de dólar ($). La interpolación de cadenas comienza con un signo de dólar ($).
*/ */
val fooTemplateString = "$fooString tiene ${fooString.length} caracteres" val fooTemplateString = "$fooString tiene ${fooString.length} caracteres"
println(fooTemplateString) println(fooTemplateString)
@ -78,8 +78,8 @@ fun main(args: Array<String>) {
/* /*
Para que una variable pueda aceptar valor nulo se debe especificar Para que una variable pueda aceptar valor nulo se debe especificar
explícitamente como anulable añadiendole ? a su tipo. explícitamente como anulable añadiendole ? a su tipo.
    Podemos acceder a una variable anulable mediante el uso del operador ?. Podemos acceder a una variable anulable mediante el uso del operador ?.
    Podemos utilizar el operador ?: para especificar un valor alternativo Podemos utilizar el operador ?: para especificar un valor alternativo
a usar si una variable es nula. a usar si una variable es nula.
*/ */
var fooNullable: String? = "abc" var fooNullable: String? = "abc"

View File

@ -131,6 +131,6 @@ Manipular[y^2, {y, 0, 20}] (* Devuelve una interfaz de usuario reactiva que mues
Sólo funciona en interfaces gráficas *) Sólo funciona en interfaces gráficas *)
``` ```
##Listo para mas? ## Listo para mas?
* [Centro de Documentación](http://reference.wolfram.com/language/) * [Centro de Documentación](http://reference.wolfram.com/language/)

View File

@ -175,6 +175,6 @@ name get-global . ! "Bob"
[ 2 + ] \ - suffix ! Quotation [ 2 + - ] [ 2 + ] \ - suffix ! Quotation [ 2 + - ]
``` ```
##Ready For More? ## Further reading
* [Factor Documentation](http://docs.factorcode.org/content/article-help.home.html) * [Factor Documentation](http://docs.factorcode.org/content/article-help.home.html)

View File

@ -218,7 +218,7 @@ page
\ bye \ bye
``` ```
##Ready For More? ## Further reading
* [Starting Forth](http://www.forth.com/starting-forth/) * [Starting Forth](http://www.forth.com/starting-forth/)
* [Simple Forth](http://www.murphywong.net/hello/simple.htm) * [Simple Forth](http://www.murphywong.net/hello/simple.htm)

View File

@ -142,7 +142,7 @@ Ces ressources apportent plus de détails avec des exemples et des définitions.
* [Algorithmes](http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X) * [Algorithmes](http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X)
* [Conception algorithmique](http://www.amazon.com/Algorithm-Design-Foundations-Analysis-Internet/dp/0471383651) * [Conception algorithmique](http://www.amazon.com/Algorithm-Design-Foundations-Analysis-Internet/dp/0471383651)
## Ressources en ligne ## Ressources en ligne
* [MIT](http://web.mit.edu/16.070/www/lecture/big_o.pdf) * [MIT](http://web.mit.edu/16.070/www/lecture/big_o.pdf)
* [KhanAcademy](https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation) * [KhanAcademy](https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation)

View File

@ -746,8 +746,8 @@ bool faireQuelqueChoseAvecUnFichier(const char* nomDuFichier)
// Suppose que chaque fonction retourne faux si elle échoue // Suppose que chaque fonction retourne faux si elle échoue
if (!faireQuelqueChoseAvecLeFichier(fh)) { if (!faireQuelqueChoseAvecLeFichier(fh)) {
       fclose(fh); // Ferme le flux d'entrée du fichier pour empêcher les fuites fclose(fh); // Ferme le flux d'entrée du fichier pour empêcher les fuites
       return false; // Propage l'erreur return false; // Propage l'erreur
} }
if (!faireAutreChoseAvec(fh)) { if (!faireAutreChoseAvec(fh)) {
fclose(fh); fclose(fh);

View File

@ -93,7 +93,7 @@ fruits = <[ apple orange pear ]>
fruits[0] # => "apple" fruits[0] # => "apple"
# Les objets sont une collection non ordonnées de paires clé/valeur, et # Les objets sont une collection non ordonnées de paires clé/valeur, et
# d'autres choses (que nous verrons plus tard). # d'autres choses (que nous verrons plus tard).
person = person =
name: "Christina" name: "Christina"
likes: likes:
@ -101,7 +101,7 @@ person =
* "and other cute stuff" * "and other cute stuff"
# A nouveau, vous pouvez utiliser une expression plus consise à l'aide des # A nouveau, vous pouvez utiliser une expression plus consise à l'aide des
# accolades: # accolades:
person = {name: "Christina", likes: ["kittens", "and other cute stuff"]} person = {name: "Christina", likes: ["kittens", "and other cute stuff"]}
# Vous pouvez récupérer une entrée via sa clé: # Vous pouvez récupérer une entrée via sa clé:
@ -113,7 +113,7 @@ person["name"] # => "Christina"
trailing-space = /\s$/ # les mots-composés deviennent motscomposés trailing-space = /\s$/ # les mots-composés deviennent motscomposés
# A l'exception que vous pouvez pouvez utiliser des expressions sur plusieurs # A l'exception que vous pouvez pouvez utiliser des expressions sur plusieurs
# lignes! # lignes!
# (les commentaires et les espaces seront ignorés) # (les commentaires et les espaces seront ignorés)
funRE = // funRE = //
function\s+(.+) # nom function\s+(.+) # nom
@ -135,9 +135,9 @@ funRE = //
# Les comparaisons sont presque identiques, à l'exception que `==` équivaut au # Les comparaisons sont presque identiques, à l'exception que `==` équivaut au
# `===` de JS, là où le `==` de JS est `~=` en LiveScript, et `===` active la # `===` de JS, là où le `==` de JS est `~=` en LiveScript, et `===` active la
# comparaison d'objets et de tableaux, ainsi que les comparaisons strictes # comparaison d'objets et de tableaux, ainsi que les comparaisons strictes
# (sans conversion de type) # (sans conversion de type)
2 == 2 # => true 2 == 2 # => true
2 == "2" # => false 2 == "2" # => false
2 ~= "2" # => true 2 ~= "2" # => true
@ -169,8 +169,8 @@ not false # => true
######################################################################## ########################################################################
# Puisque LiveScript est fonctionnel, vous vous attendez à une bonne prise en # Puisque LiveScript est fonctionnel, vous vous attendez à une bonne prise en
# charge des fonctions. En LiveScript, il est encore plus évident que les # charge des fonctions. En LiveScript, il est encore plus évident que les
# fonctions sont de premier ordre: # fonctions sont de premier ordre:
add = (left, right) -> left + right add = (left, right) -> left + right
add 1, 2 # => 3 add 1, 2 # => 3
@ -181,7 +181,7 @@ two!
# LiveScript utilise l'environnement de la fonction, comme JavaScript. # LiveScript utilise l'environnement de la fonction, comme JavaScript.
# A l'inverse de JavaScript, le `=` fonctionne comme un opérateur de # A l'inverse de JavaScript, le `=` fonctionne comme un opérateur de
# déclaration, et il déclarera toujours la variable située à gauche (sauf si # déclaration, et il déclarera toujours la variable située à gauche (sauf si
# la variable a été déclarée dans l'environnement parent). # la variable a été déclarée dans l'environnement parent).
# L'opérateur `:=` est disponible pour réutiliser un nom provenant de # L'opérateur `:=` est disponible pour réutiliser un nom provenant de
@ -189,18 +189,18 @@ two!
# Vous pouvez extraire les arguments d'une fonction pour récupérer # Vous pouvez extraire les arguments d'une fonction pour récupérer
# rapidement les valeurs qui vous intéressent dans une structure de données # rapidement les valeurs qui vous intéressent dans une structure de données
# complexe: # complexe:
tail = ([head, ...rest]) -> rest tail = ([head, ...rest]) -> rest
tail [1, 2, 3] # => [2, 3] tail [1, 2, 3] # => [2, 3]
# Vous pouvez également transformer les arguments en utilisant les opérateurs # Vous pouvez également transformer les arguments en utilisant les opérateurs
# binaires et unaires. Définir des arguments par défaut est aussi possible. # binaires et unaires. Définir des arguments par défaut est aussi possible.
foo = (a = 1, b = 2) -> a + b foo = (a = 1, b = 2) -> a + b
foo! # => 3 foo! # => 3
# You pouvez utiliser cela pour cloner un argument en particulier pour éviter # You pouvez utiliser cela pour cloner un argument en particulier pour éviter
# les effets secondaires. Par exemple: # les effets secondaires. Par exemple:
copy = (^^target, source) -> copy = (^^target, source) ->
for k,v of source => target[k] = v for k,v of source => target[k] = v
target target
@ -220,12 +220,12 @@ identity = -> it
identity 1 # => 1 identity 1 # => 1
# Les opérateurs ne sont pas des fonctions en LiveScript, mais vous pouvez # Les opérateurs ne sont pas des fonctions en LiveScript, mais vous pouvez
# facilement les transformer en fonction: # facilement les transformer en fonction:
divide-by-two = (/ 2) divide-by-two = (/ 2)
[2, 4, 8, 16].map(divide-by-two).reduce (+) [2, 4, 8, 16].map(divide-by-two).reduce (+)
# Comme dans tout bon langage fonctionnel, vous pouvez créer des fonctions # Comme dans tout bon langage fonctionnel, vous pouvez créer des fonctions
# composées d'autres fonctions: # composées d'autres fonctions:
double-minus-one = (- 1) . (* 2) double-minus-one = (- 1) . (* 2)
# En plus de la formule mathématique `f . g`, vous avez les opérateurs `>>` # En plus de la formule mathématique `f . g`, vous avez les opérateurs `>>`
@ -235,7 +235,7 @@ double-minus-one = (- 1) << (* 2)
# Pour appliquer une valeur à une fonction, vous pouvez utiliser les opérateurs # Pour appliquer une valeur à une fonction, vous pouvez utiliser les opérateurs
# `|>` et `<|`: # `|>` et `<|`:
map = (f, xs) --> xs.map f map = (f, xs) --> xs.map f
[1 2 3] |> map (* 2) # => [2 4 6] [1 2 3] |> map (* 2) # => [2 4 6]
@ -248,15 +248,15 @@ reduce = (f, xs, initial) --> xs.reduce f, initial
[1 2 3] |> reduce (+), _, 0 # => 6 [1 2 3] |> reduce (+), _, 0 # => 6
# Le tiret bas est également utilisé pour l'application partielle, # Le tiret bas est également utilisé pour l'application partielle,
# que vous pouvez utiliser pour toute fonction: # que vous pouvez utiliser pour toute fonction:
div = (left, right) -> left / right div = (left, right) -> left / right
div-by-two = div _, 2 div-by-two = div _, 2
div-by-two 4 # => 2 div-by-two 4 # => 2
# Pour conclure, LiveScript vous permet d'utiliser les fonctions de rappel. # Pour conclure, LiveScript vous permet d'utiliser les fonctions de rappel.
# (mais vous devriez essayer des approches plus fonctionnelles, comme # (mais vous devriez essayer des approches plus fonctionnelles, comme
# Promises). # Promises).
# Un fonction de rappel est une fonction qui est passée en argument à une autre # Un fonction de rappel est une fonction qui est passée en argument à une autre
# fonction: # fonction:
@ -289,7 +289,7 @@ x = switch
| otherwise => \object # `otherwise` et `_` correspondent. | otherwise => \object # `otherwise` et `_` correspondent.
# Le corps des fonctions, les déclarations et les assignements disposent d'un # Le corps des fonctions, les déclarations et les assignements disposent d'un
# `switch` implicite, donc vous n'avez pas besoin de le réécrire: # `switch` implicite, donc vous n'avez pas besoin de le réécrire:
take = (n, [x, ...xs]) --> take = (n, [x, ...xs]) -->
| n == 0 => [] | n == 0 => []
| _ => [x] ++ take (n - 1), xs | _ => [x] ++ take (n - 1), xs
@ -300,14 +300,14 @@ take = (n, [x, ...xs]) -->
######################################################################## ########################################################################
# Comme en python, vous allez pouvoir utiliser les listes en compréhension, # Comme en python, vous allez pouvoir utiliser les listes en compréhension,
# ce qui permet de générer rapidement et de manière élégante une liste de # ce qui permet de générer rapidement et de manière élégante une liste de
# valeurs: # valeurs:
oneToTwenty = [1 to 20] oneToTwenty = [1 to 20]
evens = [x for x in oneToTwenty when x % 2 == 0] evens = [x for x in oneToTwenty when x % 2 == 0]
# `when` et `unless` peuvent être utilisés comme des filtres. # `when` et `unless` peuvent être utilisés comme des filtres.
# Cette technique fonctionne sur les objets de la même manière. Vous allez # Cette technique fonctionne sur les objets de la même manière. Vous allez
# pouvoir générer l'ensemble de paires clé/valeur via la syntaxe suivante: # pouvoir générer l'ensemble de paires clé/valeur via la syntaxe suivante:
copy = { [k, v] for k, v of source } copy = { [k, v] for k, v of source }
@ -317,8 +317,8 @@ copy = { [k, v] for k, v of source }
######################################################################## ########################################################################
# Bien que LiveScript soit un langage fonctionnel, il dispose d'intéressants # Bien que LiveScript soit un langage fonctionnel, il dispose d'intéressants
# outils pour la programmation objet. La syntaxe de déclaration d'une classe # outils pour la programmation objet. La syntaxe de déclaration d'une classe
# est héritée de CoffeeScript: # est héritée de CoffeeScript:
class Animal class Animal
(@name, kind) -> (@name, kind) ->
@kind = kind @kind = kind
@ -332,7 +332,7 @@ kitten = new Cat 'Mei'
kitten.purr! # => "*Mei (a cat) purrs*" kitten.purr! # => "*Mei (a cat) purrs*"
# En plus de l'héritage classique, vous pouvez utiliser autant de mixins # En plus de l'héritage classique, vous pouvez utiliser autant de mixins
# que vous voulez pour votre classe. Les mixins sont juste des objets: # que vous voulez pour votre classe. Les mixins sont juste des objets:
Huggable = Huggable =
hug: -> @action 'is hugged' hug: -> @action 'is hugged'

View File

@ -515,7 +515,7 @@ __unsafe_unretained NSArray *unsafeArray; // Comme __weak, mais la variable n'es
// l'objet est supprimé // l'objet est supprimé
``` ```
## Lectures Complémentaires ## Lectures Complémentaires
[La Page Wikipedia de l'Objective-C](http://fr.wikipedia.org/wiki/Objective-C) [La Page Wikipedia de l'Objective-C](http://fr.wikipedia.org/wiki/Objective-C)

View File

@ -416,7 +416,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- no `d'
(values i (number->string i))) (values i (number->string i)))
; => '#hash((1 . "1") (2 . "2") (3 . "3")) ; => '#hash((1 . "1") (2 . "2") (3 . "3"))
;; Il y a plein d'autres fonctions natives pour collecter des données à ;; Il y a plein d'autres fonctions natives pour collecter des données à
;; l'aide de boucles ;; l'aide de boucles
(for/sum ([i 10]) (* i i)) ; => 285 (for/sum ([i 10]) (* i i)) ; => 285
(for/product ([i (in-range 1 11)]) (* i i)) ; => 13168189440000 (for/product ([i (in-range 1 11)]) (* i i)) ; => 13168189440000

View File

@ -35,271 +35,271 @@ Bien que Rust soit un langage relativement bas niveau, Rust a quelques concepts
// Les fonctions // Les fonctions
// `I32` est le type 32 bits entiers signés // `I32` est le type 32 bits entiers signés
fn add2(x: i32, y: i32) -> i32 { fn add2(x: i32, y: i32) -> i32 {
    // Retour implicite (pas de point virgule) // Retour implicite (pas de point virgule)
    x + y x + y
} }
// Fonction principale // Fonction principale
fn main() { fn main() {
    // Nombres // // Nombres //
    // Liaison immutable // Liaison immutable
    let x: i32 = 1; let x: i32 = 1;
    // Suffixes entiers et flottants // Suffixes entiers et flottants
    let y: I32 = 13i32; let y: I32 = 13i32;
    let f: f64 = 1.3f64; let f: f64 = 1.3f64;
    // Inférence de type // Inférence de type
    // La plupart du temps, le compilateur Rust peut déduire quel est le type // La plupart du temps, le compilateur Rust peut déduire quel est le type
// de variable, donc vous n'avez pas à écrire une annotation de type explicite. // de variable, donc vous n'avez pas à écrire une annotation de type explicite.
    // Tout au long de ce tutoriel, les types sont explicitement annotées dans // Tout au long de ce tutoriel, les types sont explicitement annotées dans
// de nombreux endroits, mais seulement à des fins de démonstration. // de nombreux endroits, mais seulement à des fins de démonstration.
// L'inférence de type peut les générer pour vous la plupart du temps. // L'inférence de type peut les générer pour vous la plupart du temps.
    let implicit_x = 1; let implicit_x = 1;
    let implicit_f = 1,3; let implicit_f = 1,3;
    // Arithmétique // Arithmétique
    let somme = x + y + 13; let somme = x + y + 13;
    // Variable Mutable // Variable Mutable
    let mut mutable = 1; let mut mutable = 1;
    let mutable = 4; let mutable = 4;
    let mutable += 2; let mutable += 2;
    // Chaînes // // Chaînes //
    // Chaîne littérales // Chaîne littérales
    let x: &str = "Bonjour tout le monde !"; let x: &str = "Bonjour tout le monde !";
    // Affichage // Affichage
    println!("{} {}", f, x); // 1.3 Bonjour tout le monde println!("{} {}", f, x); // 1.3 Bonjour tout le monde
    // Une `Chaîne` - une chaîne de tas alloué // Une `Chaîne` - une chaîne de tas alloué
    let s: String = "Bonjour tout le monde".to_string(); let s: String = "Bonjour tout le monde".to_string();
    // Un morceau de chaîne - une vue immutable sur une autre chaîne. // Un morceau de chaîne - une vue immutable sur une autre chaîne.
    // C'est essentiellement un pointeur immutable sur une chaîne - ça ne // C'est essentiellement un pointeur immutable sur une chaîne - ça ne
    // contient effectivement pas le contenu d'une chaîne, juste un pointeur vers // contient effectivement pas le contenu d'une chaîne, juste un pointeur vers
    // le début et la fin de la chaîne. // le début et la fin de la chaîne.
    let s_slice: &str = &s; let s_slice: &str = &s;
    println!("{} {}", s, s_slice); // Bonjour tout le monde Bonjour tout le monde println!("{} {}", s, s_slice); // Bonjour tout le monde Bonjour tout le monde
    // Vecteurs/tableau // // Vecteurs/tableau //
    // Un tableau de taille fixe // Un tableau de taille fixe
    let four_ints: [i32; 4] = [1, 2, 3, 4]; let four_ints: [i32; 4] = [1, 2, 3, 4];
    // Un tableau dynamique(vecteur) // Un tableau dynamique(vecteur)
    let mut vecteur: Vec<i32> = vec![1, 2, 3, 4]; let mut vecteur: Vec<i32> = vec![1, 2, 3, 4];
    vecteur.push(5); vecteur.push(5);
    // Une tranche - une vue immutable sur un vecteur ou un tableau. // Une tranche - une vue immutable sur un vecteur ou un tableau.
    // Ceci est un peu comme un morceau de chaîne, mais pour les vecteurs. // Ceci est un peu comme un morceau de chaîne, mais pour les vecteurs.
    let tranche: &[i32] = &vecteur; let tranche: &[i32] = &vecteur;
    // Utiliser `{:?}` pour afficher quelque chose en mode debug // Utiliser `{:?}` pour afficher quelque chose en mode debug
    println!("{:?} {:?}", vecteur, tranche); // [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] println!("{:?} {:?}", vecteur, tranche); // [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
    // Tuples // // Tuples //
    // Un tuple est un ensemble de valeurs qui peuvent être de différents types. // Un tuple est un ensemble de valeurs qui peuvent être de différents types.
    let x:(i32, &str, f64) = (1, "bonjour", 3.4); let x:(i32, &str, f64) = (1, "bonjour", 3.4);
    // Déstructurer `let` // Déstructurer `let`
    let (a, b, c) = x; let (a, b, c) = x;
    println!("{} {} {}", a, b, c); // 1 bonjour 3.4 println!("{} {} {}", a, b, c); // 1 bonjour 3.4
    // indexation // indexation
    println!("{}", x.1); // Bonjour println!("{}", x.1); // Bonjour
    ////////////// //////////////
    // 2. Types // // 2. Types //
    ////////////// //////////////
    // Struct // Struct
    struct Point { struct Point {
        x: i32, x: i32,
        y: i32, y: i32,
    } }
    let origine: Point = Point { x: 0, y: 0 }; let origine: Point = Point { x: 0, y: 0 };
    // Un struct avec des champs sans nom, appelé 'tuple struct'. // Un struct avec des champs sans nom, appelé 'tuple struct'.
    struct Point2(i32, i32); struct Point2(i32, i32);
    let origine2 = Point2(0, 0); let origine2 = Point2(0, 0);
    // Basic C-like enum // Basic C-like enum
    enum Direction { enum Direction {
        Àgauche, Àgauche,
        Droite, Droite,
        En_Haut, En_Haut,
        Vers_Le_Bas, Vers_Le_Bas,
    } }
    let en_haut = Direction::En_Haut; let en_haut = Direction::En_Haut;
    // Enum avec des champs // Enum avec des champs
    enum OptionnelI32 { enum OptionnelI32 {
        AnI32(I32), AnI32(I32),
        Rien, Rien,
    } }
    let deux: OptionnelI32 = OptionnelI32::AnI32(2); let deux: OptionnelI32 = OptionnelI32::AnI32(2);
    let rien = OptionnelI32::Rien; let rien = OptionnelI32::Rien;
    // Generics // // Generics //
    struct Foo<T> { bar: T } struct Foo<T> { bar: T }
    // Ceci est défini dans la bibliothèque standard comme `Option`. // Ceci est défini dans la bibliothèque standard comme `Option`.
    enum Optionnel<T> { enum Optionnel<T> {
        SomeVal(T), SomeVal(T),
        NoVal, NoVal,
    } }
    // Méthodes // // Méthodes //
    impl<T> Foo<T> { impl<T> Foo<T> {
        // Méthodes prennent un paramètre explicite `de self`. // Méthodes prennent un paramètre explicite `de self`.
        fn get_bar(self) -> T { fn get_bar(self) -> T {
            self.bar self.bar
        } }
    } }
    let a_foo = Foo { bar: 1 }; let a_foo = Foo { bar: 1 };
    println!("{}", a_foo.get_bar()); // 1 println!("{}", a_foo.get_bar()); // 1
    // Traits (connu sous le nom des interfaces ou des classes de types dans // Traits (connu sous le nom des interfaces ou des classes de types dans
// d'autres langues). // d'autres langues).
    trait Frobnicate<T> { trait Frobnicate<T> {
        fn frobnicate(self) -> Option<T>; fn frobnicate(self) -> Option<T>;
    } }
    impl<T> Frobnicate<T> for Foo<T> { impl<T> Frobnicate<T> for Foo<T> {
        fn frobnicate(self) -> Option<T> { fn frobnicate(self) -> Option<T> {
            Some(self.bar) Some(self.bar)
        } }
    } }
    let another_foo = Foo { bar: 1 }; let another_foo = Foo { bar: 1 };
    println!("{:?}", another_foo.frobnicate()); // Some(1) println!("{:?}", another_foo.frobnicate()); // Some(1)
    ///////////////////////// /////////////////////////
    // 3. Motif correspondant // // 3. Motif correspondant //
    ///////////////////////// /////////////////////////
    let foo = OptionnelI32::AnI32(1); let foo = OptionnelI32::AnI32(1);
    match foo { match foo {
        OptionnelI32::AnI32(n) => println!("Il est un i32: {}", n), OptionnelI32::AnI32(n) => println!("Il est un i32: {}", n),
        OptionnelI32::Rien => println!("Il n'y a rien!"), OptionnelI32::Rien => println!("Il n'y a rien!"),
    } }
    // Motif avancé correspondant // Motif avancé correspondant
    struct FooBar { x: i32, y: OptionnelI32 } struct FooBar { x: i32, y: OptionnelI32 }
    let bar = FooBar { x: 15, y: OptionnelI32::AnI32(32) }; let bar = FooBar { x: 15, y: OptionnelI32::AnI32(32) };
    match bar { match bar {
        FooBar { x: 0, y: OptionnelI32 :: AnI32(0)} => FooBar { x: 0, y: OptionnelI32 :: AnI32(0)} =>
            println!("Les chiffres sont nuls!"), println!("Les chiffres sont nuls!"),
        FooBar { x: n, y: OptionnelI32 :: AnI32(m)} if n == m => FooBar { x: n, y: OptionnelI32 :: AnI32(m)} if n == m =>
            println!("Les chiffres sont les mêmes"), println!("Les chiffres sont les mêmes"),
        FooBar { x: n, y: OptionnelI32 :: AnI32(m)} => FooBar { x: n, y: OptionnelI32 :: AnI32(m)} =>
            println!("Différents numéros: {} {}", n, m)!, println!("Différents numéros: {} {}", n, m)!,
        FooBar { x: _, y: OptionnelI32 :: Rien} => FooBar { x: _, y: OptionnelI32 :: Rien} =>
            println!("Le deuxième numéro est rien!"), println!("Le deuxième numéro est rien!"),
    } }
    ///////////////////// /////////////////////
    // 4. Flux de contrôle // // 4. Flux de contrôle //
    ///////////////////// /////////////////////
    // `for` boucles / itération // `for` boucles / itération
    let array = [1, 2, 3]; let array = [1, 2, 3];
    for i in array { for i in array {
        println!("{}", i); println!("{}", i);
    } }
    // Ranges // Ranges
    for i in 0u32..10 { for i in 0u32..10 {
        print!("{}", i); print!("{}", i);
    } }
    println!(""); println!("");
    // imprime `0 1 2 3 4 5 6 7 8 9` // imprime `0 1 2 3 4 5 6 7 8 9`
    // `if` // `if`
    if 1 == 1 { if 1 == 1 {
        println!("Maths est travaille!"); println!("Maths est travaille!");
    } else { } else {
        println!("Oh non ...!"); println!("Oh non ...!");
    } }
    // `if` comme expression // `if` comme expression
    let valeur = if true { let valeur = if true {
        "bien" "bien"
    } else { } else {
        "mal" "mal"
    }; };
    // `while` boucle // `while` boucle
    while 1 == 1 { while 1 == 1 {
        println!("L'univers fonctionne normalement."); println!("L'univers fonctionne normalement.");
    } }
    // Boucle infinie // Boucle infinie
    loop { loop {
        println!("Bonjour!"); println!("Bonjour!");
    } }
    ///////////////////////////////// /////////////////////////////////
    // 5. Sécurité & pointeurs mémoire // // 5. Sécurité & pointeurs mémoire //
    ///////////////////////////////// /////////////////////////////////
// Pointeur occasion - une seule chose peut "posséder" pointeur à un moment. // Pointeur occasion - une seule chose peut "posséder" pointeur à un moment.
    // Cela signifie que lorsque le `Box` laisse son champ d'application, il // Cela signifie que lorsque le `Box` laisse son champ d'application, il
// peut être automatiquement libérée en toute sécurité. // peut être automatiquement libérée en toute sécurité.
    let mut mine: Box<i32> = Box::new(3); let mut mine: Box<i32> = Box::new(3);
    *mine = 5; // déréférencer *mine = 5; // déréférencer
    // Ici, `now_its_mine` prend possession de `mine`. En d'autres termes, // Ici, `now_its_mine` prend possession de `mine`. En d'autres termes,
// `mine` est déplacé. // `mine` est déplacé.
    let mut now_its_mine = mine; let mut now_its_mine = mine;
    *now_its_mine += 2; *now_its_mine += 2;
    println!("{}", now_its_mine); // 7 println!("{}", now_its_mine); // 7
    // println!("{}", now_its_mine); // Cela ne compile pas parce // println!("{}", now_its_mine); // Cela ne compile pas parce
// que `now_its_mine` possède maintenant le pointeur // que `now_its_mine` possède maintenant le pointeur
    // Référence - un pointeur immutable qui fait référence à d'autres données. // Référence - un pointeur immutable qui fait référence à d'autres données.
    // Quand une référence est prise à une valeur, nous disons que la valeur // Quand une référence est prise à une valeur, nous disons que la valeur
// a été "emprunté". // a été "emprunté".
    // Même si une valeur est emprunté immutablement, il ne peut pas être // Même si une valeur est emprunté immutablement, il ne peut pas être
// muté ou déplacé. // muté ou déplacé.
    // Un emprunt dure jusqu'à la fin de la portée, il a été créé. // Un emprunt dure jusqu'à la fin de la portée, il a été créé.
    let mut var = 4; let mut var = 4;
    var = 3; var = 3;
    let ref_var: &i32 = &var; let ref_var: &i32 = &var;
    println!("{}", var); // Contrairement à `mine`, `var` peut encore être utilisé println!("{}", var); // Contrairement à `mine`, `var` peut encore être utilisé
    println!("{}", *ref_var); println!("{}", *ref_var);
    // Var = 5; // Cela ne compile pas parce que `var` est emprunté. // Var = 5; // Cela ne compile pas parce que `var` est emprunté.
    // *ref_var = 6; // Ce ne serait pas correct non plus, parce que `ref_var` est une // *ref_var = 6; // Ce ne serait pas correct non plus, parce que `ref_var` est une
// référence immutable. // référence immutable.
    // Référence Mutable // Référence Mutable
    // Même si une valeur est empruntée de façon mutable, elle ne peut pas être // Même si une valeur est empruntée de façon mutable, elle ne peut pas être
// accessible à tous. // accessible à tous.
    let mut var2 = 4; let mut var2 = 4;
    let ref_var2: &mut i32 = &mut var2; let ref_var2: &mut i32 = &mut var2;
// '*' est utilisé pour pointer vers le var2 mutably emprunté. // '*' est utilisé pour pointer vers le var2 mutably emprunté.
*ref_var2 += 2; *ref_var2 += 2;
println!("{}", * ref_var2); // 6, // var2 ne compilerait pas. println!("{}", * ref_var2); // 6, // var2 ne compilerait pas.
    // ref_var2 est de type &mut i32 donc stocke la référence à i32, // ref_var2 est de type &mut i32 donc stocke la référence à i32,
// pas la valeur. // pas la valeur.
    // var2 = 2; // Cela ne compile pas parce que `var2` est emprunté. // var2 = 2; // Cela ne compile pas parce que `var2` est emprunté.
} }
``` ```

View File

@ -41,10 +41,10 @@ Contrairement à HTML, XML ne spécifie pas comment afficher ou formater les inf
Il commence par une déclaration, qui informe certaines métadonnées (en option). Il commence par une déclaration, qui informe certaines métadonnées (en option).
XML utilise une structure arborescente. Ci-dessus, le nœud racine est «librairie», qui a XML utilise une structure arborescente. Ci-dessus, le nœud racine est «librairie», qui a
   trois nœuds enfants, qui sont appelés «livres». Ces nœuds ont plus de nœuds enfants, et ainsi de suite ... trois nœuds enfants, qui sont appelés «livres». Ces nœuds ont plus de nœuds enfants, et ainsi de suite ...
On crée les nœuds avec des balises d'ouverture / fermeture, et les enfants sont les nœuds juste entre On crée les nœuds avec des balises d'ouverture / fermeture, et les enfants sont les nœuds juste entre
   les balises d'ouverture et de fermeture. --> les balises d'ouverture et de fermeture. -->
<!-- XML porte deux types d'informations: <!-- XML porte deux types d'informations:
@ -72,7 +72,7 @@ Avec cet outil, vous pouvez vérifier les données XML en dehors de la logique d
```xml ```xml
<!-- Ci-dessous, vous pouvez voir une version simplifiée du document de librairie, <!-- Ci-dessous, vous pouvez voir une version simplifiée du document de librairie,
   avec l'addition de définition DTD. --> avec l'addition de définition DTD. -->
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Librairie.dtd"> <!DOCTYPE note SYSTEM "Librairie.dtd">
@ -95,10 +95,10 @@ Avec cet outil, vous pouvez vérifier les données XML en dehors de la logique d
]> ]>
<!-- La DTD commence par une déclaration. <!-- La DTD commence par une déclaration.
   Après, le nœud racine est déclaré, qui exige un ou plusieurs nœuds enfants. Après, le nœud racine est déclaré, qui exige un ou plusieurs nœuds enfants.
   Chaque «livre» doit contenir exactement un «titre» et «prix» et un attribut Chaque «livre» doit contenir exactement un «titre» et «prix» et un attribut
   appelé «catégorie», avec «littérature» comme valeur par défaut. appelé «catégorie», avec «littérature» comme valeur par défaut.
   Les nœuds de «titre» et «prix» contiennent des informations de caractère analysés Les nœuds de «titre» et «prix» contiennent des informations de caractère analysés
(Anglais: «parsed character data») --> (Anglais: «parsed character data») -->
<!-- La DTD pourrait être déclarée dans le fichier XML lui-même --> <!-- La DTD pourrait être déclarée dans le fichier XML lui-même -->

View File

@ -151,14 +151,8 @@ HTML קיצור של Hypertext Markup Language כלומר זוהי שפה שמש
</table> </table>
``` ```
## שימוש
HTML נכתב בקבצים המסתיימים ב-`.html` או `.htm`.
**HTML אינה שפת תכנות**
## לקריאה נוספת ## לקריאה נוספת
- [Wikipedia](https://he.wikipedia.org/wiki/HTML) - [Wikipedia](https://he.wikipedia.org/wiki/HTML)
- [HTML Tutorial (EN)](https://developer.mozilla.org/en-US/docs/Web/HTML) - [HTML Tutorial (EN)](https://developer.mozilla.org/en-US/docs/Web/HTML)
- [W3Schools (EN)](http://www.w3schools.com/html/html_intro.asp) - [W3Schools (EN)](http://www.w3schools.com/html/html_intro.asp)

View File

@ -1049,7 +1049,7 @@ for(auto elem: arr) {
// मजेदार चीजें // मजेदार चीजें
///////////////////// /////////////////////
// सी ++ के पहलू जो नवागंतुकों (और यहां तक कि कुछ दिग्गजों) के लिए आश्चर्यजनक हो सकते हैं। // सी ++ के पहलू जो नवागंतुकों (और यहां तक कि कुछ दिग्गजों) के लिए आश्चर्यजनक हो सकते हैं।
// यह खंड, दुर्भाग्य से, बेतहाशा अधूरा है; सी ++ सबसे आसान में से एक है // यह खंड, दुर्भाग्य से, बेतहाशा अधूरा है; सी ++ सबसे आसान में से एक है
// भाषाएं जिनके साथ अपने आप को पैर में गोली मारनी है। // भाषाएं जिनके साथ अपने आप को पैर में गोली मारनी है।

View File

@ -107,7 +107,7 @@ T max(T)(T a, T b) {
return a; return a;
} }
// संदर्भ द्वारा पारित सुनिश्चित करने के लिए रेफरी कीवर्ड का प्रयोग करें । यही कारण है कि यहां तक कि 'A' और 'B' , तो है // संदर्भ द्वारा पारित सुनिश्चित करने के लिए रेफरी कीवर्ड का प्रयोग करें । यही कारण है कि यहां तक कि 'A' और 'B' , तो है
//मान प्रकार वे हमेशा ' swap()' के संदर्भ द्वारा पारित हो जाएगा हैं । //मान प्रकार वे हमेशा ' swap()' के संदर्भ द्वारा पारित हो जाएगा हैं ।
void swap(T)(ref T a, ref T b) { void swap(T)(ref T a, ref T b) {
auto temp = a; auto temp = a;

View File

@ -28,7 +28,7 @@ print "halo"
REM Struktur kontrol REM Struktur kontrol
FOR index = 0 TO 10 STEP 2 FOR index = 0 TO 10 STEP 2
  ? "Ini adalah nomor baris"; indeks ? "Ini adalah nomor baris"; indeks
NEXT NEXT
J=0 J=0
REPEAT REPEAT
@ -57,10 +57,10 @@ End Try
REM Fungsi dan subrutin buatan pengguna REM Fungsi dan subrutin buatan pengguna
func add2(x, y) func add2(x, y)
  'Variabel dapat dinyatakan sebagai lokal dalam lingkup/scope dari SUB atau FUNC 'Variabel dapat dinyatakan sebagai lokal dalam lingkup/scope dari SUB atau FUNC
  local k local k
  k = "k akan lenyap ketika FUNC ini mengembalikan nilai" k = "k akan lenyap ketika FUNC ini mengembalikan nilai"
  add2 = x + y add2 = x + y
akhir akhir
Print add2(5,5) Print add2(5,5)
sub cetak_ini(ini) sub cetak_ini(ini)

View File

@ -95,23 +95,23 @@ Pengurai XML dirancang menjadi sangat ketat, dan akan berhenti melakukan pengura
</tokobuku> </tokobuku>
<!-- Di atas adalah contoh file XML biasa. <!-- Di atas adalah contoh file XML biasa.
   Dimulai dengan deklarasi, menginformasikan beberapa metadata (opsional). Dimulai dengan deklarasi, menginformasikan beberapa metadata (opsional).
  
   XML menggunakan struktur pohon. Di atas, simpul akar adalah 'tokobuku', XML menggunakan struktur pohon. Di atas, simpul akar adalah 'tokobuku',
yang memiliki tiga node anak, para 'buku'. Node-node tersebut dapat memiliki yang memiliki tiga node anak, para 'buku'. Node-node tersebut dapat memiliki
node-node anak, dan seterusnya ... node-node anak, dan seterusnya ...
  
   Node dibuat menggunakan tag buka/tutup, dan node-node anak hanya Node dibuat menggunakan tag buka/tutup, dan node-node anak hanya
berada di antara tag buka dan tutup .--> berada di antara tag buka dan tutup .-->
<!-- XML membawa dua jenis data: <!-- XML membawa dua jenis data:
   1 - Atribut -> Itu metadata tentang sebuah node. 1 - Atribut -> Itu metadata tentang sebuah node.
       Biasanya, parser XML menggunakan informasi ini untuk menyimpan data dengan Biasanya, parser XML menggunakan informasi ini untuk menyimpan data dengan
benar. Hal ini ditandai dengan muncul dengan format nama = "nilai" dalam pembukaan tag. benar. Hal ini ditandai dengan muncul dengan format nama = "nilai" dalam pembukaan tag.
   2 - Elemen -> Itu data yang murni. 2 - Elemen -> Itu data yang murni.
       Itulah yang parser akan mengambil dari file XML. Itulah yang parser akan mengambil dari file XML.
       Elemen muncul antara tag membuka dan menutup.--> Elemen muncul antara tag membuka dan menutup.-->
<!-- Di bawah ini, unsur dengan dua atribut--> <!-- Di bawah ini, unsur dengan dua atribut-->
@ -131,7 +131,7 @@ Dengan alat ini, Anda dapat memeriksa data XML di luar logika aplikasi.
```xml ```xml
<!-- Di bawah, Anda dapat melihat versi sederhana dari dokumen tokobuku, <!-- Di bawah, Anda dapat melihat versi sederhana dari dokumen tokobuku,
  dengan penambahan definisi DTD .--> dengan penambahan definisi DTD .-->
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catatan SYSTEM "tokobuku.dtd"> <!DOCTYPE catatan SYSTEM "tokobuku.dtd">
@ -155,10 +155,10 @@ Dengan alat ini, Anda dapat memeriksa data XML di luar logika aplikasi.
<!-- DTD dimulai dengan deklarasi. <!-- DTD dimulai dengan deklarasi.
  Berikut, node akar dinyatakan, membutuhkan 1 atau lebih anak node 'buku'. Berikut, node akar dinyatakan, membutuhkan 1 atau lebih anak node 'buku'.
  Setiap 'buku' harus berisi tepat satu 'judul' dan 'harga' dan atribut Setiap 'buku' harus berisi tepat satu 'judul' dan 'harga' dan atribut
  disebut 'kategori', dengan "Sastra" sebagai nilai default. disebut 'kategori', dengan "Sastra" sebagai nilai default.
  Node yang 'judul' dan 'harga' mengandung karakter data diurai .--> Node yang 'judul' dan 'harga' mengandung karakter data diurai .-->
<!-- DTD dapat dideklarasikan di dalam file XML itu sendiri .--> <!-- DTD dapat dideklarasikan di dalam file XML itu sendiri .-->

View File

@ -57,13 +57,13 @@ Le liste sono semplici come in Markdown:
- primo articolo - primo articolo
- Secondo elemento - Secondo elemento
     - Sottoelemento - Sottoelemento
oppure oppure
* Primo elemento * Primo elemento
* Secondo elemento * Secondo elemento
     * Sottoelemento * Sottoelemento
Le tabelle sono molto semplici da inserire: Le tabelle sono molto semplici da inserire:

View File

@ -93,7 +93,7 @@ Le implementazioni Ruby possono avere una propria versione, ma hanno sempre come
target una specifica versione di MRI. Molte implementazioni hanno l'abilità di target una specifica versione di MRI. Molte implementazioni hanno l'abilità di
selezionare una versione specifica di MRI. selezionare una versione specifica di MRI.
##Ruby Spec ## Ruby Spec
La maggior parte delle implementazioni Ruby dipendono pesantemente su La maggior parte delle implementazioni Ruby dipendono pesantemente su
[Ruby Spec](https://github.com/ruby/spec). Ruby non ha una specifica ufficiale, quindi la [Ruby Spec](https://github.com/ruby/spec). Ruby non ha una specifica ufficiale, quindi la

View File

@ -94,8 +94,8 @@ false
'a' 'a'
# Strings are UTF8 encoded, so strings like "π" or "☃" are not directly equivalent # Strings are UTF8 encoded, so strings like "π" or "☃" are not directly equivalent
# to an array of single characters. # to an array of single characters.
# Only if they contain only ASCII characters can they be safely indexed. # Only if they contain only ASCII characters can they be safely indexed.
ascii("This is a string")[1] # => 'T' ascii("This is a string")[1] # => 'T'
# => 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase) # => 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
# Beware, Julia indexes everything from 1 (like MATLAB), not 0 (like most languages). # Beware, Julia indexes everything from 1 (like MATLAB), not 0 (like most languages).
@ -114,7 +114,7 @@ ascii("This is a string")[1] # => 'T'
println("I'm Julia. Nice to meet you!") # => I'm Julia. Nice to meet you! println("I'm Julia. Nice to meet you!") # => I'm Julia. Nice to meet you!
# Another way to format strings is the printf macro from the stdlib Printf. # Another way to format strings is the printf macro from the stdlib Printf.
using Printf # this is how you load (or import) a module using Printf # this is how you load (or import) a module
@printf "%d is less than %f\n" 4.5 5.3 # => 5 is less than 5.300000 @printf "%d is less than %f\n" 4.5 5.3 # => 5 is less than 5.300000
@ -392,7 +392,7 @@ end
for animal = ["dog", "cat", "mouse"] for animal = ["dog", "cat", "mouse"]
println("$animal is a mammal") println("$animal is a mammal")
# You can use $ to interpolate variables or expression into strings. # You can use $ to interpolate variables or expression into strings.
# In this special case, no need for parenthesis: $animal and $(animal) give the same # In this special case, no need for parenthesis: $animal and $(animal) give the same
end end
# => dog is a mammal # => dog is a mammal
# => cat is a mammal # => cat is a mammal

View File

@ -202,7 +202,7 @@ We can also insert Tables in the same way as figures.
% the {} arguments below describe how each row of the table is drawn. % the {} arguments below describe how each row of the table is drawn.
% The basics are simple: one letter for each column, to control alignment: % The basics are simple: one letter for each column, to control alignment:
% basic options are: c, l, r and p for centered, left, right and paragraph % basic options are: c, l, r and p for centered, left, right and paragraph
% optionally, you can add a | for a vertical line % optionally, you can add a | for a vertical line
% See https://en.wikibooks.org/wiki/LaTeX/Tables for more details % See https://en.wikibooks.org/wiki/LaTeX/Tables for more details
\begin{tabular}{c|cc} % here it means "centered | vertical line, centered centered" \begin{tabular}{c|cc} % here it means "centered | vertical line, centered centered"
Number & First Name & Last Name \\ % Column rows are separated by & Number & First Name & Last Name \\ % Column rows are separated by &

105
linker.md
View File

@ -1,34 +1,31 @@
--- ---
category: tool category: tool
name: GNU linker (ld) name: Linker script
contributors: contributors:
- ["Alexander Kovalchuk", "https://github.com/Zamuhrishka"] - ["Alexander Kovalchuk", "https://github.com/Zamuhrishka"]
translators: translators:
- ["Anuj Shah", "https://github.com/ShahAnuj2610"] - ["Anuj Shah", "https://github.com/ShahAnuj2610"]
filename: learn.ld
--- ---
## Basic concepts and definitions
**Position counter** - the linker has a special variable **Position counter** - the linker has a special variable
"." (dot) always contains the current output position. "`.`" (dot) always contains the current output position.
## Functions `ADDR (section)` - returns the absolute address of the specified section. However
**ADDR (section)** - returns the absolute address of the specified section. However
this section must be defined before using the ADDR function. this section must be defined before using the ADDR function.
**ALIGN (exp)** - returns the value of the position counter aligned to the border `ALIGN (exp)` - returns the value of the position counter aligned to the border
following the exp expression. following the exp expression.
**SIZEOF (section)** - returns the size of the section in bytes. `SIZEOF (section)` - returns the size of the section in bytes.
**FILL (param)** - defines the fill pattern for the current section. All `FILL (param)` - defines the fill pattern for the current section. All
other unspecified regions within the section are filled with the value indicated other unspecified regions within the section are filled with the value indicated
in function argument. in function argument.
**KEEP (param)** - used to mark param as fatal. `KEEP (param)` - used to mark param as fatal.
**ENTRY (func)** - defines the function that will be the entry point `ENTRY (func)` - defines the function that will be the entry point
into the program. into the program.
```bash ```bash
@ -45,7 +42,7 @@ _Min_Stack_Size = 0x400;
# Description of the memory card available for this processor # Description of the memory card available for this processor
# MEMORY # MEMORY
# { # {
#MEMORY_DOMAIN_NAME (access rights): ORIGIN = START_ADDRESS, LENGTH = SIZE # MEMORY_DOMAIN_NAME (access rights) : ORIGIN = START_ADDRESS, LENGTH = SIZE
# } # }
# In our example, the controller contains three memory areas: # In our example, the controller contains three memory areas:
# RAM - starts with the address 0x20000000 and takes 128 KB; # RAM - starts with the address 0x20000000 and takes 128 KB;
@ -56,33 +53,33 @@ _Min_Stack_Size = 0x400;
# FLASH memory is available for reading and execution. # FLASH memory is available for reading and execution.
MEMORY MEMORY
{ {
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
} }
# We describe output sections # We describe output sections
SECTIONS SECTIONS
{ {
# The first section contains a table of interrupt vectors # The first section contains a table of interrupt vectors
.isr_vector : .isr_vector :
{ {
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# There is an option --gc-sections, which allows you to collect garbage from unused # There is an option --gc-sections, which allows you to collect garbage from unused
# input sections. And if there are sections that the garbage collector should not touch, # input sections. And if there are sections that the garbage collector should not touch,
# you need to specify them as an argument to the KEEP () function (analogue of the keyword # you need to specify them as an argument to the KEEP () function (analogue of the keyword
# volatile). # volatile).
# The entry (* (. Isr_vector)) means the .isr_vector sections in all object files. Because # The entry (* (. Isr_vector)) means the .isr_vector sections in all object files. Because
# appeal to the section in general terms looks like this: (FILE_NAME (SECTION_NAME)) # appeal to the section in general terms looks like this: (FILE_NAME (SECTION_NAME))
KEEP(*(.isr_vector)) KEEP(*(.isr_vector))
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# The expression "> MEMORY AREA" indicates which area of memory will be placed # The expression "> MEMORY AREA" indicates which area of memory will be placed
# this section. In our section, the .isr_vector section will be located in FLASH memory. # this section. In our section, the .isr_vector section will be located in FLASH memory.
} >FLASH } >FLASH
# TOTAL: The .isr_vector section that contains the table of interrupt vectors is aligned # TOTAL: The .isr_vector section that contains the table of interrupt vectors is aligned
@ -92,24 +89,24 @@ SECTIONS
# The second section contains the program code. # The second section contains the program code.
.text : .text :
{ {
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# We indicate that in this section the .text areas of all # We indicate that in this section the .text areas of all
# object files # object files
*(.text) *(.text)
*(.text*) *(.text*)
# Protect the .init and .fini sections from the garbage collector # Protect the .init and .fini sections from the garbage collector
KEEP (*(.init)) KEEP (*(.init))
KEEP (*(.fini)) KEEP (*(.fini))
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# The variable _etext is defined, which stores the address of the end of the .text section and which # The variable _etext is defined, which stores the address of the end of the .text section and which
# may be available in the source code of the program through the announcement # may be available in the source code of the program through the announcement
# volaile unsigned int extern _etext; # volaile unsigned int extern _etext;
_etext = .; _etext = .;
} >FLASH } >FLASH
@ -123,15 +120,15 @@ SECTIONS
# The third section contains constant data. # The third section contains constant data.
.rodata : .rodata :
{ {
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# We indicate that in this section areas .rodata will be stored # We indicate that in this section areas .rodata will be stored
# object files # object files
*(.rodata) *(.rodata)
*(.rodata*) *(.rodata*)
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
} >FLASH } >FLASH
@ -141,47 +138,47 @@ SECTIONS
# The fourth section contains initialized variables. # The fourth section contains initialized variables.
.data : .data :
{ {
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# Save the address of the current position (beginning of the section) in the variable _sdata # Save the address of the current position (beginning of the section) in the variable _sdata
_sdata = .; _sdata = .;
# We indicate that in this section the .data areas of all # We indicate that in this section the .data areas of all
# object files # object files
*(.data) *(.data)
*(.data*) *(.data*)
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# Save the address of the current position (end of section) in the variable _sdata # Save the address of the current position (end of section) in the variable _sdata
_edata = .; _edata = .;
# AT function indicates that this sector is stored in one memory area # AT function indicates that this sector is stored in one memory area
# (in our case, FLASH), and it will be executed from another area of memory (in our case, RAM). # (in our case, FLASH), and it will be executed from another area of memory (in our case, RAM).
# There are two types of addresses: # There are two types of addresses:
# * VMA (Virtual memory address) - this is the run-time address at which the compiler expects # * VMA (Virtual memory address) - this is the run-time address at which the compiler expects
# see data. # see data.
# * LMA (Load memory address) is the address at which the linker stores data. # * LMA (Load memory address) is the address at which the linker stores data.
#Startup must code to copy the .data section from the LMA addresses to the VMA addresses. #Startup must code to copy the .data section from the LMA addresses to the VMA addresses.
} >RAM AT> FLASH } >RAM AT> FLASH
# The fifth section contains zero-initialized variables. # The fifth section contains zero-initialized variables.
.bss : .bss :
{ {
# Save the address of the current position (beginning of the section) in the variable _sbss and __bss_start__ # Save the address of the current position (beginning of the section) in the variable _sbss and __bss_start__
_sbss = .; _sbss = .;
__bss_start__ = _sbss; __bss_start__ = _sbss;
# We indicate that in this section the .bss areas of all # We indicate that in this section the .bss areas of all
# object files # object files
*(.bss) *(.bss)
*(.bss*) *(.bss*)
# Align the current position to the border of 4 bytes. # Align the current position to the border of 4 bytes.
. = ALIGN(4); . = ALIGN(4);
# Save the address of the current position (beginning of the section) in the variable _ebss and __bss_end__ # Save the address of the current position (beginning of the section) in the variable _ebss and __bss_end__

View File

@ -19,14 +19,14 @@ def extract_yaml_frontmatter(file_path):
yaml_config = yamllint.config.YamlLintConfig( yaml_config = yamllint.config.YamlLintConfig(
"""{ """{
extends: relaxed, extends: default,
rules: { rules: {
commas: disable, commas: disable,
trailing-spaces: disable, trailing-spaces: disable,
indentation: disable, indentation: disable,
line-length: disable, line-length: disable,
empty-lines: disable empty-lines: disable
} }
}""" }"""
) )

View File

@ -181,5 +181,5 @@ KTHXBYE
## Further reading: ## Further reading:
- [LCI compiler](https://github.com/justinmeza/lci) - [LCI compiler](https://github.com/justinmeza/lci)
- [Official spec](https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md) - [Official spec](https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md)

View File

@ -244,7 +244,7 @@ gateways and routers.
## FUNCTIONS ## ## FUNCTIONS ##
_functions: _functions:
# Functions are callable procedures that can accept arguments and return # Functions are callable procedures that can accept arguments and return
# values all denoted with labels, like above # values all denoted with labels, like above
main: # Programs begin with main func main: # Programs begin with main func
jal return_1 # jal will store the current PC in $ra jal return_1 # jal will store the current PC in $ra

View File

@ -2,7 +2,7 @@
name: Nmap name: Nmap
category: tool category: tool
contributors: contributors:
- [ "Sebastian Oberdorfer" , "https://github.com/SOberdorfer" ] - ["Sebastian Oberdorfer", "https://github.com/SOberdorfer"]
--- ---
### Learn Nmap in Y Minutes ### Learn Nmap in Y Minutes

View File

@ -119,7 +119,7 @@ public class LearnJava {
// Zmienną inicjalizuje się poprzez <rodzaj> <nazwa> = <wartość> // Zmienną inicjalizuje się poprzez <rodzaj> <nazwa> = <wartość>
int barInt = 1; int barInt = 1;
// Możliwe jest zainicjalizowanie wielu zmiennych tego samego typu tą samą wartością // Możliwe jest zainicjalizowanie wielu zmiennych tego samego typu tą samą wartością
// rodzaj <nazwa1>, <nazwa2>, <nazwa3> // rodzaj <nazwa1>, <nazwa2>, <nazwa3>
// <nazwa1> = <nazwa2> = <nazwa3> = <wartość> // <nazwa1> = <nazwa2> = <nazwa3> = <wartość>
int barInt1, barInt2, barInt3; int barInt1, barInt2, barInt3;

View File

@ -334,6 +334,6 @@ safe(Group) :- memberchk(joker, Group) -> memberchk(batman, Group) ; true.
?- maplist(plus(1), [2,3,4], Output). % Output = [3, 4, 5]. ?- maplist(plus(1), [2,3,4], Output). % Output = [3, 4, 5].
``` ```
##Ready For More? ## Further reading
* [SWI-Prolog](http://www.swi-prolog.org/) * [SWI-Prolog](http://www.swi-prolog.org/)

View File

@ -106,7 +106,7 @@ namespace Learning.CSharp
char fooChar = 'A'; char fooChar = 'A';
// Strings - ao contrário dos anteriores tipos base, que são todos os tipos de valor, // Strings - ao contrário dos anteriores tipos base, que são todos os tipos de valor,
            // Uma string é um tipo de referência. Ou seja, você pode configurá-lo como nulo // Uma string é um tipo de referência. Ou seja, você pode configurá-lo como nulo
string fooString = "\"escape\" quotes and add \n (new lines) and \t (tabs)"; string fooString = "\"escape\" quotes and add \n (new lines) and \t (tabs)";
Console.WriteLine(fooString); Console.WriteLine(fooString);
@ -732,9 +732,9 @@ on a new line! ""Wow!"", the masses cried";
} }
// Você também pode definir uma propriedade automática em uma linha // Você também pode definir uma propriedade automática em uma linha
        // Esta sintaxe criará um campo de apoio automaticamente. // Esta sintaxe criará um campo de apoio automaticamente.
        // Você pode definir um modificador de acesso no getter ou no setter (ou ambos) // Você pode definir um modificador de acesso no getter ou no setter (ou ambos)
        // para restringir seu acesso: // para restringir seu acesso:
public bool IsBroken { get; private set; } public bool IsBroken { get; private set; }
// Properties can be auto-implemented // Properties can be auto-implemented
@ -856,7 +856,7 @@ on a new line! ""Wow!"", the masses cried";
/// <summary> /// <summary>
/// Exemplo de como conectar-se ao DB via LinqToSql. /// Exemplo de como conectar-se ao DB via LinqToSql.
    /// EntityFramework First Code é impressionante (semelhante ao ActiveRecord de Ruby, mas bidirecional) /// EntityFramework First Code é impressionante (semelhante ao ActiveRecord de Ruby, mas bidirecional)
/// http://msdn.microsoft.com/en-us/data/jj193542.aspx /// http://msdn.microsoft.com/en-us/data/jj193542.aspx
/// </summary> /// </summary>
public class BikeRepository : DbContext public class BikeRepository : DbContext

View File

@ -71,7 +71,7 @@ Você pode encadear vários relacionamentos. Este path descreve o amigo de um am
`(a:Person)-[:MANAGES]->(b:Person)-[:MANAGES]->(c:Person)` `(a:Person)-[:MANAGES]->(b:Person)-[:MANAGES]->(c:Person)`
Uma encadeamento também pode ser direcionada. Este path descreve que **a** é o chefe de **b** e o grande chefe de **c**. Uma encadeamento também pode ser direcionada. Este path descreve que **a** é o chefe de **b** e o grande chefe de **c**.
Padrões frequentemente usados (do Neo4j doc): Padrões frequentemente usados (do Neo4j doc):
```cypher ```cypher
// Amigo de um amigo // Amigo de um amigo

View File

@ -125,14 +125,14 @@ f [ . ] when* ! Nenhuma saída, pilha vazia, f é consumida porque é falsa
! Variáveis ! Variáveis
! Normalmente, espera-se que os programas Factor mantenham todos os dados na pilha. ! Normalmente, espera-se que os programas Factor mantenham todos os dados na pilha.
! Usar variáveis nomeadas torna a refatoração mais difícil (e é chamada de Factor por um motivo) ! Usar variáveis nomeadas torna a refatoração mais difícil (e é chamada de Factor por um motivo)
! Variáveis globais, se você precisar: ! Variáveis globais, se você precisar:
SYMBOL: name ! Cria o nome como uma palavra identificadora SYMBOL: name ! Cria o nome como uma palavra identificadora
"Bob" name set-global ! Sem saída "Bob" name set-global ! Sem saída
name get-global . ! "Bob" name get-global . ! "Bob"
! Variáveis locais nomeadas são consideradas uma extensão, mas estão disponíveis ! Variáveis locais nomeadas são consideradas uma extensão, mas estão disponíveis
! Em uma citação .. ! Em uma citação ..
[| m n ! A citação captura os dois principais valores da pilha em m e n [| m n ! A citação captura os dois principais valores da pilha em m e n
| m n + ] ! Leia-os | m n + ] ! Leia-os
@ -143,10 +143,10 @@ name get-global . ! "Bob"
c . ; ! Imprima isso c . ; ! Imprima isso
! Em uma palavra declarada dessa maneira, o lado de entrada da declaração de pilha ! Em uma palavra declarada dessa maneira, o lado de entrada da declaração de pilha
! torna-se significativo e fornece os valores das variáveis em que os valores da pilha são capturados ! torna-se significativo e fornece os valores das variáveis em que os valores da pilha são capturados
:: double ( a -- result ) a 2 * ; :: double ( a -- result ) a 2 * ;
! Variáveis são declaradas mutáveis ao terminar seu nome com um ponto de exclamação ! Variáveis são declaradas mutáveis ao terminar seu nome com um ponto de exclamação
:: mword2 ( a! -- x y ) ! Capture o topo da pilha na variável mutável a :: mword2 ( a! -- x y ) ! Capture o topo da pilha na variável mutável a
a ! Empurrar a a ! Empurrar a
a 2 * a! ! Multiplique por 2 e armazene o resultado em a a 2 * a! ! Multiplique por 2 e armazene o resultado em a
@ -175,6 +175,6 @@ name get-global . ! "Bob"
[ 2 + ] \ - suffix ! Quotation [ 2 + - ] [ 2 + ] \ - suffix ! Quotation [ 2 + - ]
``` ```
##Pronto para mais? ## Pronto para mais?
* [Documentação do Factor](http://docs.factorcode.org/content/article-help.home.html) * [Documentação do Factor](http://docs.factorcode.org/content/article-help.home.html)

View File

@ -413,7 +413,7 @@ class Velocipede extends Bicicleta {
// Exemplo - Comida: // Exemplo - Comida:
public interface Comestivel { public interface Comestivel {
public void comer(); // Qualquer classe que implementa essa interface, deve public void comer(); // Qualquer classe que implementa essa interface, deve
                        // implementar este método. // implementar este método.
} }
public interface Digestivel { public interface Digestivel {
@ -483,8 +483,8 @@ public abstract class Animal
} }
// Não há necessidade de inicializar, no entanto, em uma interface // Não há necessidade de inicializar, no entanto, em uma interface
    // a variável é implicitamente final e, portanto, tem // a variável é implicitamente final e, portanto, tem
    // de ser inicializada. // de ser inicializada.
protected int idade; protected int idade;
public void mostrarIdade() public void mostrarIdade()
@ -503,7 +503,7 @@ class Cachorro extends Animal
{ {
// Nota: ainda precisamos substituir os métodos abstratos na // Nota: ainda precisamos substituir os métodos abstratos na
    // classe abstrata. // classe abstrata.
@Override @Override
public void fazerSom() public void fazerSom()
{ {
@ -512,10 +512,10 @@ class Cachorro extends Animal
} }
// NOTA: Você receberá um erro se usou a // NOTA: Você receberá um erro se usou a
    // anotação Override aqui, uma vez que java não permite // anotação Override aqui, uma vez que java não permite
    // sobrescrita de métodos estáticos. // sobrescrita de métodos estáticos.
    // O que está acontecendo aqui é chamado de "esconder o método". // O que está acontecendo aqui é chamado de "esconder o método".
    // Vejá também este impressionante SO post: http://stackoverflow.com/questions/16313649/ // Vejá também este impressionante SO post: http://stackoverflow.com/questions/16313649/
public static void main(String[] args) public static void main(String[] args)
{ {
Cachorro pluto = new Cachorro(); Cachorro pluto = new Cachorro();
@ -540,7 +540,7 @@ class Cachorro extends Animal
public final class TigreDenteDeSabre extends Animal public final class TigreDenteDeSabre extends Animal
{ {
// Nota: Ainda precisamos substituir os métodos abstratos na // Nota: Ainda precisamos substituir os métodos abstratos na
    // classe abstrata. // classe abstrata.
@Override @Override
public void fazerSom(); public void fazerSom();
{ {
@ -555,7 +555,7 @@ public abstract class Mamifero()
// <modificador-de-acesso> final <tipo-de-retorno> <nome-do-método>(<argumentos>) // <modificador-de-acesso> final <tipo-de-retorno> <nome-do-método>(<argumentos>)
// Métodos finais, como classes finais, não podem ser substituídos por uma classe filha, // Métodos finais, como classes finais, não podem ser substituídos por uma classe filha,
    // e são, portanto, a implementação final do método. // e são, portanto, a implementação final do método.
public final boolean EImpulsivo() public final boolean EImpulsivo()
{ {
return true; return true;

View File

@ -26,7 +26,7 @@ Less (e outros pré-processadores, como o [Sass](http://sass-lang.com/)) ajudam
@secondary-color: #51527f; @secondary-color: #51527f;
@body-font: 'Roboto', sans-serif; @body-font: 'Roboto', sans-serif;
/* Você pode usar as variáveis em toda a sua folha de estilo. /* Você pode usar as variáveis em toda a sua folha de estilo.
Agora, se você quiser alterar uma cor, só precisa fazer a alteração uma vez. */ Agora, se você quiser alterar uma cor, só precisa fazer a alteração uma vez. */
body { body {

View File

@ -31,7 +31,7 @@ Existem muitas variedades de make na existência, no entanto, este artigo pressu
# Uma regra - esta regra só será executada se o arquivo0.txt não existir. # Uma regra - esta regra só será executada se o arquivo0.txt não existir.
arquivo0.txt: arquivo0.txt:
echo "foo" > arquivo0.txt echo "foo" > arquivo0.txt
# Mesmo os comentários nestas seções da 'receita' são passados para o shell. # Mesmo os comentários nestas seções da 'receita' são passados para o shell.
# Experimentar `make arquivo0.txt` or simplyou simplesmente `make` - primeira regra é o padrão. # Experimentar `make arquivo0.txt` or simplyou simplesmente `make` - primeira regra é o padrão.
# Esta regra só será executada se arquivo0.txt for mais recente que arquivo1.txt. # Esta regra só será executada se arquivo0.txt for mais recente que arquivo1.txt.
@ -74,7 +74,7 @@ ex0.txt ex1.txt: maker
# Alvos falsos comuns são: todos fazem instalação limpa ... # Alvos falsos comuns são: todos fazem instalação limpa ...
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# Variáveis Automáticas e Curingas # Variáveis Automáticas e Curingas
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
process: Arquivo*.txt # Usando um curinga para corresponder nomes de arquivos process: Arquivo*.txt # Usando um curinga para corresponder nomes de arquivos
@ -130,7 +130,7 @@ small/%.png: %.svg
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# aka. macros # aka. macros
# As variáveis são basicamente todos os tipos de string # As variáveis são basicamente todos os tipos de string
name = Ted name = Ted
name2="Sarah" name2="Sarah"
@ -139,14 +139,14 @@ echo:
@echo $(name) @echo $(name)
@echo ${name2} @echo ${name2}
@echo $name # Isso não funcionará, tratado como $ (n)ame. @echo $name # Isso não funcionará, tratado como $ (n)ame.
@echo $(name3) # Variáveis desconhecidas são tratadas como strings vazias. @echo $(name3) # Variáveis desconhecidas são tratadas como strings vazias.
# Existem 4 lugares para definir variáveis. # Existem 4 lugares para definir variáveis.
# Em ordem de prioridade, do maior para o menor: # Em ordem de prioridade, do maior para o menor:
# 1: argumentos de linha de comando # 1: argumentos de linha de comando
# 2: Makefile # 2: Makefile
# 3: variáveis de ambiente do shell - faça importações automaticamente. # 3: variáveis de ambiente do shell - faça importações automaticamente.
# 4: make tem algumas variáveis predefinidas # 4: make tem algumas variáveis predefinidas
name4 ?= Jean name4 ?= Jean
# Somente defina a variável se a variável de ambiente ainda não estiver definida. # Somente defina a variável se a variável de ambiente ainda não estiver definida.
@ -157,12 +157,12 @@ override name5 = David
name4 +=grey name4 +=grey
# Anexar valores à variável (inclui um espaço). # Anexar valores à variável (inclui um espaço).
# Valores variáveis específicos de padrões (extensão GNU). # Valores variáveis específicos de padrões (extensão GNU).
echo: name2 = Sara # Verdadeiro dentro da regra de correspondência echo: name2 = Sara # Verdadeiro dentro da regra de correspondência
# e também dentro de suas recursivas dependências # e também dentro de suas recursivas dependências
# (exceto que ele pode quebrar quando seu gráfico ficar muito complicado!) # (exceto que ele pode quebrar quando seu gráfico ficar muito complicado!)
# Algumas variáveis definidas automaticamente pelo make # Algumas variáveis definidas automaticamente pelo make
echo_inbuilt: echo_inbuilt:
echo $(CC) echo $(CC)
echo ${CXX} echo ${CXX}
@ -177,7 +177,7 @@ echo_inbuilt:
# Variáveis 2 # Variáveis 2
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# O primeiro tipo de variáveis é avaliado a cada vez que elas são usadas. # O primeiro tipo de variáveis é avaliado a cada vez que elas são usadas.
# TIsso pode ser caro, então existe um segundo tipo de variável que é # TIsso pode ser caro, então existe um segundo tipo de variável que é
# avaliado apenas uma vez. (Esta é uma extensão do GNU make) # avaliado apenas uma vez. (Esta é uma extensão do GNU make)
@ -185,7 +185,7 @@ var := hello
var2 ::= $(var) hello var2 ::= $(var) hello
#:= e ::= são equivalentes. #:= e ::= são equivalentes.
# Essas variáveis são avaliadas procedimentalmente (na ordem em que # Essas variáveis são avaliadas procedimentalmente (na ordem em que
# aparecem), quebrando assim o resto da línguagem! # aparecem), quebrando assim o resto da línguagem!
# Isso não funciona # Isso não funciona

View File

@ -100,7 +100,7 @@ double valorDouble = 1,12345D; // Double (números de ponto flutuante de 64 bits
// Existem vários tipos de dados compostos que estão disponíveis por padrão para // Existem vários tipos de dados compostos que estão disponíveis por padrão para
// uso no Processing. // uso no Processing.
// Primeiramente, farei um resumo dos mais usados para economizar tempo. // Primeiramente, farei um resumo dos mais usados para economizar tempo.
// String // String
// Enquanto o tipo de dados char usa '', o tipo de dados String usa "" - aspas // Enquanto o tipo de dados char usa '', o tipo de dados String usa "" - aspas
@ -118,7 +118,7 @@ print("Olá " + "Mundo!"); // Olá Mundo!
// próprios objetos. Como os arrays são semelhantes aos objetos, eles devem // próprios objetos. Como os arrays são semelhantes aos objetos, eles devem
// ser criados com a palavra-chave "new". // ser criados com a palavra-chave "new".
int[] arrayInt = new int[5]; int[] arrayInt = new int[5];
int[] arrayIntComValores = {1, 2, 3}; // Você também pode preencher com dados. int[] arrayIntComValores = {1, 2, 3}; // Você também pode preencher com dados.
// Lista de Arrays // Lista de Arrays
// As funções são semelhantes às do array; arraylists podem conter qualquer // As funções são semelhantes às do array; arraylists podem conter qualquer
@ -192,7 +192,7 @@ if (author.getAppearance().equals("quente")) {
// Você pode verificar outras condições aqui. // Você pode verificar outras condições aqui.
print("Algo está realmente errado aqui!"); print("Algo está realmente errado aqui!");
} }
// Um atalho para instruções if-else também pode ser usado. // Um atalho para instruções if-else também pode ser usado.
int = 3; int = 3;
String valor = (i > 5) ? "Grande" : "Pequena"; // "Pequena" String valor = (i > 5) ? "Grande" : "Pequena"; // "Pequena"

View File

@ -131,10 +131,10 @@ div {
/* Sass fornece funções que podem ser utilizados para realizar uma variedade de /* Sass fornece funções que podem ser utilizados para realizar uma variedade de
    tarefas. Considere o seguinte */ tarefas. Considere o seguinte */
/* Funções pode ser chamado usando seu nome e passando o /* Funções pode ser chamado usando seu nome e passando o
    argumentos necessários */ argumentos necessários */
body { body {
width: round(10.25px); width: round(10.25px);
@ -162,7 +162,7 @@ body {
reutilizável. */ reutilizável. */
/* Esta função terá um tamanho de destino e o tamanho do pai (parent), calcular /* Esta função terá um tamanho de destino e o tamanho do pai (parent), calcular
   e voltar a percentagem */ e voltar a percentagem */
@function calculate-percentage($target-size, $parent-size) { @function calculate-percentage($target-size, $parent-size) {
@return $target-size / $parent-size * 100%; @return $target-size / $parent-size * 100%;
@ -219,11 +219,11 @@ $main-content: calculate-percentage(600px, 960px);
} }
/* Ao ampliar uma declaração CSS é preferível a criação de um mixin, /* Ao ampliar uma declaração CSS é preferível a criação de um mixin,
   por causa da maneira em que agrupa as classes com todos que compartilham por causa da maneira em que agrupa as classes com todos que compartilham
   o mesmo estilo base. Se isso for feito com um mixin, a largura, o mesmo estilo base. Se isso for feito com um mixin, a largura,
   altura, e a borda seria duplicado para cada instrução que altura, e a borda seria duplicado para cada instrução que
   o chamado mixin. Enquanto isso não irá afetar o seu fluxo de trabalho, será o chamado mixin. Enquanto isso não irá afetar o seu fluxo de trabalho, será
   adicionado inchaço desnecessário para os arquivos criados pelo compilador Sass. */ adicionado inchaço desnecessário para os arquivos criados pelo compilador Sass. */
@ -293,8 +293,8 @@ ul li a {
/* Sass permite criar arquivos parciais. Isso pode ajudar a manter seu Sass /* Sass permite criar arquivos parciais. Isso pode ajudar a manter seu Sass
   código modularizado. Arquivos parciais deve começar com um '_', por exemplo, _reset.css. código modularizado. Arquivos parciais deve começar com um '_', por exemplo, _reset.css.
   Parciais não são geradas em CSS. */ Parciais não são geradas em CSS. */
@ -309,9 +309,9 @@ ol {
} }
/* Sass oferece @import que pode ser usado para importar parciais em um arquivo. /* Sass oferece @import que pode ser usado para importar parciais em um arquivo.
   Isso difere da declaração CSS @import tradicional, que faz Isso difere da declaração CSS @import tradicional, que faz
   outra solicitação HTTP para buscar o arquivo importado. Sass converte os outra solicitação HTTP para buscar o arquivo importado. Sass converte os
   arquivo importados e combina com o código compilado. */ arquivo importados e combina com o código compilado. */
@import 'reset'; @import 'reset';
@ -339,9 +339,9 @@ body {
/* Os Placeholders são úteis na criação de uma declaração CSS para ampliar. Se você /* Os Placeholders são úteis na criação de uma declaração CSS para ampliar. Se você
   deseja criar uma instrução CSS que foi usado exclusivamente com @extend, deseja criar uma instrução CSS que foi usado exclusivamente com @extend,
   você pode fazer isso usando um Placeholder. Placeholder começar com um '%' em vez você pode fazer isso usando um Placeholder. Placeholder começar com um '%' em vez
   de '.' ou '#'. Placeholder não aparece no CSS compilado. */ de '.' ou '#'. Placeholder não aparece no CSS compilado. */
%content-window { %content-window {
font-size: 14px; font-size: 14px;
@ -375,7 +375,7 @@ body {
/* Sass fornece os seguintes operadores: +, -, *, /, e %. estes podem /* Sass fornece os seguintes operadores: +, -, *, /, e %. estes podem
   ser úteis para calcular os valores diretamente no seu arquivos Sass em vez ser úteis para calcular os valores diretamente no seu arquivos Sass em vez
de usar valores que você já calcula manualmente. O exemplo abaixo é de usar valores que você já calcula manualmente. O exemplo abaixo é
de um projeto simples de duas colunas. */ de um projeto simples de duas colunas. */

View File

@ -12,7 +12,7 @@ A sintaxe do Stylus é muito flexivel podendo utilizar a sintaxe padrão do CSS
Stylus não fornece novas opções de estilos, mas dá funcionalidades que permitem deixar seu CSS muito mais dinâmico. Stylus não fornece novas opções de estilos, mas dá funcionalidades que permitem deixar seu CSS muito mais dinâmico.
```sass ```scss
/* Estilo de código /* Estilo de código
==============================*/ ==============================*/

View File

@ -92,7 +92,7 @@ module Module1
Console.Title = " Olá Mundo YourName | Saiba X em Y Minutes" Console.Title = " Olá Mundo YourName | Saiba X em Y Minutes"
' Variáveis ' Variáveis
'Os dados inseridos por um usuário precisam ser armazenados. 'Os dados inseridos por um usuário precisam ser armazenados.
' As variáveis também começar com um Dim e terminar com um Como VariableType. ' As variáveis também começar com um Dim e terminar com um Como VariableType.
' Neste tutorial, nós queremos saber qual é o seu nome, e faça o programa ' Neste tutorial, nós queremos saber qual é o seu nome, e faça o programa
' Responder ao que é dito. ' Responder ao que é dito.
@ -103,7 +103,7 @@ module Module1
Console.WriteLine (" Olá " + username) ' A saída é "Olá < seu nome >". Console.WriteLine (" Olá " + username) ' A saída é "Olá < seu nome >".
Console.ReadLine () ' Outsputs acima. Console.ReadLine () ' Outsputs acima.
' O código acima irá lhe fazer uma pergunta seguiu imprimindo sua resposta. ' O código acima irá lhe fazer uma pergunta seguiu imprimindo sua resposta.
" Outras variáveis incluem Integer e usamos inteiro para números inteiros. " Outras variáveis incluem Integer e usamos inteiro para números inteiros.
End Sub End Sub
"Três "Três

View File

@ -6,7 +6,7 @@ contributors:
- ["Samantha McVey", "https://cry.nu"] - ["Samantha McVey", "https://cry.nu"]
--- ---
Raku (formerly Perl 6) is a highly capable, feature-rich programming language Raku (formerly Perl 6) is a highly capable, feature-rich programming language
made for at least the next hundred years. made for at least the next hundred years.
The primary Raku compiler is called [Rakudo](http://rakudo.org), which runs on The primary Raku compiler is called [Rakudo](http://rakudo.org), which runs on

View File

@ -33,7 +33,7 @@ translators:
void function_1(); void function_1();
void function_2(); void function_2();
// Точка входа в программу  это функция main. // Точка входа в программу это функция main.
int main() { int main() {
// для форматированного вывода в консоль используется printf // для форматированного вывода в консоль используется printf
// %d означает, что будем выводить целое число, \n переводит указатель вывода // %d означает, что будем выводить целое число, \n переводит указатель вывода
@ -120,7 +120,7 @@ int main() {
printf("%d\n", a_string[16]); // => 0 printf("%d\n", a_string[16]); // => 0
// байт #17 тоже равен 0 (а также 18, 19, и 20) // байт #17 тоже равен 0 (а также 18, 19, и 20)
// Если между одинарными кавычками есть символ  это символьный литерал, // Если между одинарными кавычками есть символ это символьный литерал,
// но это тип int, а не char (по историческим причинам). // но это тип int, а не char (по историческим причинам).
int cha = 'a'; // хорошо int cha = 'a'; // хорошо
@ -325,7 +325,7 @@ int main() {
// Вы также можете динамически выделять несколько блоков памяти с помощью // Вы также можете динамически выделять несколько блоков памяти с помощью
// функции malloc из стандартной библиотеки, которая принимает один // функции malloc из стандартной библиотеки, которая принимает один
// аргумент типа size_t  количество байт необходимых для выделения. // аргумент типа size_t количество байт необходимых для выделения.
int *my_ptr = malloc(sizeof(*my_ptr) * 20); int *my_ptr = malloc(sizeof(*my_ptr) * 20);
for (xx = 0; xx < 20; xx++) { for (xx = 0; xx < 20; xx++) {
*(my_ptr + xx) = 20 - xx; // my_ptr[xx] = 20-xx *(my_ptr + xx) = 20 - xx; // my_ptr[xx] = 20-xx

View File

@ -233,7 +233,7 @@ words
bye bye
``` ```
##Готовы к большему? ## Готовы к большему?
* [Начала Форта (англ.)](http://www.forth.com/starting-forth/) * [Начала Форта (англ.)](http://www.forth.com/starting-forth/)
* [Простой Форт (англ.)](http://www.murphywong.net/hello/simple.htm) * [Простой Форт (англ.)](http://www.murphywong.net/hello/simple.htm)

View File

@ -1,30 +1,26 @@
--- ---
contributors: contributors:
- ["Alexander Kovalchuk", "https://github.com/Zamuhrishka"] - ["Alexander Kovalchuk", "https://github.com/Zamuhrishka"]
translators:
- ["Alexander Kovalchuk", "https://github.com/Zamuhrishka"]
--- ---
# Основные понятия и определения **Счетчик позиций** - у компоновщика есть специальная переменная
**Счетчик позиций** - у компоновщика есть специальная переменная "`.`" (точка) всегда содержит текущую позицию вывода.
"." (точка) всегда содержит текущую позицию вывода.
# Функции `ADDR(section)` - возвращает абсолютный адрес указанной секции. Однако
**ADDR(section)** - возвращает абсолютный адрес указанной секции. Однако
данная секция должна быть определенна до использования функции ADDR. данная секция должна быть определенна до использования функции ADDR.
**ALIGN(exp)** - возвращает значение счетчика позиций, выравненное на границу `ALIGN(exp)` - возвращает значение счетчика позиций, выравненное на границу
следующего за exp выражения. следующего за exp выражения.
**SIZEOF(section)** - возвращает размер секции в байтах. `SIZEOF(section)` - возвращает размер секции в байтах.
**FILL(param)** - определяет образец заполнения для текущей секции. Все `FILL(param)` - определяет образец заполнения для текущей секции. Все
остальные неуказанные регионы внутри секции заполняются значением указанными остальные неуказанные регионы внутри секции заполняются значением указанными
в аргументе функции. в аргументе функции.
**KEEP(param)** - используется чтобы помечать param как неустранимый. `KEEP(param)` - используется чтобы помечать param как неустранимый.
**ENTRY(func)** - определяет функцию, которая будет являться точкой входа `ENTRY(func)` - определяет функцию, которая будет являться точкой входа
в программу. в программу.
```bash ```bash
@ -32,16 +28,16 @@ translators:
ENTRY(Reset_Handler) ENTRY(Reset_Handler)
# Определяем переменную которая содержит адрес вершины стека # Определяем переменную которая содержит адрес вершины стека
_estack = 0x20020000; _estack = 0x20020000;
# Определяем переменную которая содержит значение размера кучи # Определяем переменную которая содержит значение размера кучи
_Min_Heap_Size = 0x200; _Min_Heap_Size = 0x200;
# Определяем переменную которая содержит значение размера стека # Определяем переменную которая содержит значение размера стека
_Min_Stack_Size = 0x400; _Min_Stack_Size = 0x400;
# Описание карты памяти доступной для данного процессора # Описание карты памяти доступной для данного процессора
# MEMORY # MEMORY
# { # {
# ИМЯ_ОБЛАСТИ_ПАМЯТИ (права доступа) : ORIGIN = АДРЕС_НАЧАЛА, LENGTH = РАЗМЕР # ИМЯ_ОБЛАСТИ_ПАМЯТИ (права доступа) : ORIGIN = АДРЕС_НАЧАЛА, LENGTH = РАЗМЕР
# } # }
# В нашем примере контроллер содержит три области памяти: # В нашем примере контроллер содержит три области памяти:
# RAM - начинается с адреса 0x20000000 и занимает 128 Кбайт; # RAM - начинается с адреса 0x20000000 и занимает 128 Кбайт;
@ -52,136 +48,136 @@ _Min_Stack_Size = 0x400;
# FLASH память доступна на чтение и исполнение. # FLASH память доступна на чтение и исполнение.
MEMORY MEMORY
{ {
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
} }
# Описываем выходные секции # Описываем выходные секции
SECTIONS SECTIONS
{ {
# Первая секция содержит таблицу векторов прерываний # Первая секция содержит таблицу векторов прерываний
.isr_vector : .isr_vector :
{ {
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Существует опция --gc-sections, которая позволяет собирать мусор из неиспользуемых # Существует опция --gc-sections, которая позволяет собирать мусор из неиспользуемых
# входных разделов. И если есть разделы, которые сборщик мусора не должен трогать, # входных разделов. И если есть разделы, которые сборщик мусора не должен трогать,
# то их необходимо указать в качестве аргумента функции KEEP() (аналог ключевого слова # то их необходимо указать в качестве аргумента функции KEEP() (аналог ключевого слова
# volatile). # volatile).
# Запись (*(.isr_vector)) означает разделы .isr_vector во всех объектных файлах. Т.к. # Запись (*(.isr_vector)) означает разделы .isr_vector во всех объектных файлах. Т.к.
# обращение к разделу в общем виде выглядит так: (ИМЯ_ФАЙЛАМЯ_РАЗДЕЛА)) # обращение к разделу в общем виде выглядит так: (ИМЯ_ФАЙЛАМЯ_РАЗДЕЛА))
KEEP(*(.isr_vector)) KEEP(*(.isr_vector))
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Выражение ">ОБЛАСТЬАМЯТИ" указывает в какую именно область памяти будет помещена # Выражение ">ОБЛАСТЬАМЯТИ" указывает в какую именно область памяти будет помещена
# данная секция. В нашем случае секция .isr_vector будет размещена во FLASH памяти. # данная секция. В нашем случае секция .isr_vector будет размещена во FLASH памяти.
} >FLASH } >FLASH
# ИТОГО: Секция .isr_vector, которая содержит таблицу векторов прерываний выравнивается # ИТОГО: Секция .isr_vector, которая содержит таблицу векторов прерываний выравнивается
# по границе 4-х байт, помечается как недоступная для сборщика мусора и размещается в начале # по границе 4-х байт, помечается как недоступная для сборщика мусора и размещается в начале
# FLASH памяти микроконтроллера. # FLASH памяти микроконтроллера.
# Вторая секция содержит код программы. # Вторая секция содержит код программы.
.text : .text :
{ {
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Указываем, что в данной секции будут хранится области .text всех
# объектных файлов
*(.text)
*(.text*)
# Защищаем от сборщика мусора секции .init и .fini # Указываем, что в данной секции будут хранится области .text всех
# объектных файлов
*(.text)
*(.text*)
# Защищаем от сборщика мусора секции .init и .fini
KEEP (*(.init)) KEEP (*(.init))
KEEP (*(.fini)) KEEP (*(.fini))
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Определяется переменная _etext, которая хранит в себе адрес конца секции .text и которая # Определяется переменная _etext, которая хранит в себе адрес конца секции .text и которая
# может быть доступна в исходном тексте программы через объявление # может быть доступна в исходном тексте программы через объявление
# volaile unsigned int extern _etext; # volaile unsigned int extern _etext;
_etext = .; _etext = .;
} >FLASH } >FLASH
# ИТОГО: Секция .text, которая содержит код программы выравнивается по границе 4-х байт, # ИТОГО: Секция .text, которая содержит код программы выравнивается по границе 4-х байт,
# включает в себя: все секции с кодом программы во всех объектных файлах и защищенные # включает в себя: все секции с кодом программы во всех объектных файлах и защищенные
от сборщика муссора секции .init и .fini во всех объектных файлах, распологается во FLASH # от сборщика муссора секции .init и .fini во всех объектных файлах, распологается во FLASH
памяти микроконтроллера сразу за таблицей векторов. # памяти микроконтроллера сразу за таблицей векторов.
Секции text, .init и .fini. располагаются в памяти в той последовательности в которой они # Секции text, .init и .fini. располагаются в памяти в той последовательности в которой они
объявлены в скрипте. # объявлены в скрипте.
# Третья секция содержит константные данные. # Третья секция содержит константные данные.
.rodata : .rodata :
{ {
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Указываем, что в данной секции будут хранится области .rodata всех # Указываем, что в данной секции будут хранится области .rodata всех
# объектных файлов # объектных файлов
*(.rodata) *(.rodata)
*(.rodata*) *(.rodata*)
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
} >FLASH } >FLASH
# Сохраняем в переменной _sidata абсолютный адрес секции .data # Сохраняем в переменной _sidata абсолютный адрес секции .data
_sidata = LOADADDR(.data); _sidata = LOADADDR(.data);
# Четвертая секция содержит инициализированные переменные. # Четвертая секция содержит инициализированные переменные.
.data : .data :
{ {
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Сохраняем в переменной _sdata адрес текущей позиции (начала секции) # Сохраняем в переменной _sdata адрес текущей позиции (начала секции)
_sdata = .; _sdata = .;
# Указываем, что в данной секции будут хранится области .data всех
# объектных файлов
*(.data)
*(.data*)
# Выравниваем текущую позицию на границу 4-х байт. # Указываем, что в данной секции будут хранится области .data всех
# объектных файлов
*(.data)
*(.data*)
# Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Сохраняем в переменной _sdata адрес текущей позиции (конец секции) # Сохраняем в переменной _sdata адрес текущей позиции (конец секции)
_edata = .; _edata = .;
# Функция AT указывает на то, что данный сектор хранится в одной области памяти # Функция AT указывает на то, что данный сектор хранится в одной области памяти
# (в нашем случае FLASH), а исполняться будет из другой области памяти (в нашем случае RAM). # (в нашем случае FLASH), а исполняться будет из другой области памяти (в нашем случае RAM).
# Есть два типа адресов: # Есть два типа адресов:
# * VMA (Virtual memory address) - это run-time адрес по которому компилятор ожидает # * VMA (Virtual memory address) - это run-time адрес по которому компилятор ожидает
# видеть данные. # видеть данные.
# * LMA (Load memory address) - это адрес по которому линкер хранит данные. # * LMA (Load memory address) - это адрес по которому линкер хранит данные.
#Startup должен код скопировать секцию .data из адресов LMA в адреса VMA. # Startup должен код скопировать секцию .data из адресов LMA в адреса VMA.
} >RAM AT> FLASH } >RAM AT> FLASH
# Пятая секция содержит инициализированные нулем переменные. # Пятая секция содержит инициализированные нулем переменные.
.bss : .bss :
{ {
# Сохраняем в переменной _sbss и __bss_start__ адрес текущей позиции (начала секции) # Сохраняем в переменной _sbss и __bss_start__ адрес текущей позиции (начала секции)
_sbss = .; _sbss = .;
__bss_start__ = _sbss; __bss_start__ = _sbss;
# Указываем, что в данной секции будут хранится области .bss всех # Указываем, что в данной секции будут хранится области .bss всех
# объектных файлов # объектных файлов
*(.bss) *(.bss)
*(.bss*) *(.bss*)
# Выравниваем текущую позицию на границу 4-х байт. # Выравниваем текущую позицию на границу 4-х байт.
. = ALIGN(4); . = ALIGN(4);
# Сохраняем в переменной _ebss и __bss_end__ адрес текущей позиции (начала секции) # Сохраняем в переменной _ebss и __bss_end__ адрес текущей позиции (начала секции)
_ebss = .; _ebss = .;
__bss_end__ = _ebss; __bss_end__ = _ebss;
} >RAM } >RAM
@ -197,4 +193,3 @@ SECTIONS
} >RAM } >RAM
} }
``` ```

View File

@ -15,7 +15,7 @@ Stylus syntax is very flexible. You can use standard CSS syntax and leave the se
Stylus does not provide new style options, but gives functionality that lets you make your CSS much more dynamic. Stylus does not provide new style options, but gives functionality that lets you make your CSS much more dynamic.
```sass ```scss
/* Code style /* Code style
==============================*/ ==============================*/
@ -81,8 +81,8 @@ a {
/* /*
You can store a CSS value (such as the color) of a variable. You can store a CSS value (such as the color) of a variable.
  Although it is optional, it is recommended to add $ before a variable name Although it is optional, it is recommended to add $ before a variable name
  so you can distinguish a variable from another CSS value. so you can distinguish a variable from another CSS value.
*/ */
$primary-color = #A3A4FF $primary-color = #A3A4FF

View File

@ -4,8 +4,6 @@ contributors:
- ["Seçkin KÜKRER", "https://github.com/LeaveNhA"] - ["Seçkin KÜKRER", "https://github.com/LeaveNhA"]
--- ---
# Y = 20 Dakika.
### Genişletilebilir Veri Notasyonu (EDN, Extensible Data Notation). ### Genişletilebilir Veri Notasyonu (EDN, Extensible Data Notation).
### Okunuşu: (Türkçe: ey-di-en), (English: eed-n) ### Okunuşu: (Türkçe: ey-di-en), (English: eed-n)

View File

@ -17,7 +17,7 @@ PHP 5+ versiyonu için geçerlidir.
// // işareti ile tek satırlık yorum satırı başlar. // // işareti ile tek satırlık yorum satırı başlar.
# # işareti de aynı görevi görür ancak // daha genel kullanımdadır. # # işareti de aynı görevi görür ancak // daha genel kullanımdadır.
@ -45,7 +45,7 @@ Hello World Again!
* Tipler ve Değişkenler * Tipler ve Değişkenler
*************************************/ *************************************/
// Değişkenler $ sembolü ile başlar. // Değişkenler $ sembolü ile başlar.
// Geçerli bir değişken bir harf veya alt çizgi ile başlar, // Geçerli bir değişken bir harf veya alt çizgi ile başlar,
// devamında da bir sayı, harf veya alt çizgi ile devam eder. // devamında da bir sayı, harf veya alt çizgi ile devam eder.

View File

@ -35,8 +35,8 @@ uygulanabilir. Python 3 için başka bir zaman tekrar bakınız.
10 * 2 #=> 20 10 * 2 #=> 20
35 / 5 #=> 7 35 / 5 #=> 7
# Bölünme biraz ilginç. EĞer tam sayılar üzerinde bölünme işlemi yapıyorsanız # Bölünme biraz ilginç. EĞer tam sayılar üzerinde bölünme işlemi yapıyorsanız
# sonuç otomatik olarak kırpılır. # sonuç otomatik olarak kırpılır.
5 / 2 #=> 2 5 / 2 #=> 2
# Bölünme işlemini düzenlemek için kayan noktalı sayıları bilmeniz gerekir. # Bölünme işlemini düzenlemek için kayan noktalı sayıları bilmeniz gerekir.
@ -80,30 +80,30 @@ not False #=> True
"Hello " + "world!" #=> "Hello world!" "Hello " + "world!" #=> "Hello world!"
# A string can be treated like a list of characters # A string can be treated like a list of characters
# Bir string'e karakter listesi gibi davranabilirsiniz. # Bir string'e karakter listesi gibi davranabilirsiniz.
"This is a string"[0] #=> 'T' "This is a string"[0] #=> 'T'
# % karakter dizisini(string) formatlamak için kullanılır, bunun gibi: # % karakter dizisini(string) formatlamak için kullanılır, bunun gibi:
"%s can be %s" % ("strings", "interpolated") "%s can be %s" % ("strings", "interpolated")
# String'leri formatlamanın yeni bir yöntem ise format metodudur. # String'leri formatlamanın yeni bir yöntem ise format metodudur.
# Bu metod tercih edilen yöntemdir. # Bu metod tercih edilen yöntemdir.
"{0} can be {1}".format("strings", "formatted") "{0} can be {1}".format("strings", "formatted")
# Eğer saymak istemiyorsanız anahtar kelime kullanabilirsiniz. # Eğer saymak istemiyorsanız anahtar kelime kullanabilirsiniz.
"{name} wants to eat {food}".format(name="Bob", food="lasagna") "{name} wants to eat {food}".format(name="Bob", food="lasagna")
# None bir objedir # None bir objedir
None #=> None None #=> None
# "==" eşitliğini non objesi ile karşılaştırmak için kullanmayın. # "==" eşitliğini non objesi ile karşılaştırmak için kullanmayın.
# Onun yerine "is" kullanın. # Onun yerine "is" kullanın.
"etc" is None #=> False "etc" is None #=> False
None is None #=> True None is None #=> True
# 'is' operatörü obje kimliği için test etmektedir. Bu ilkel değerler # 'is' operatörü obje kimliği için test etmektedir. Bu ilkel değerler
# için kullanışlı değildir, ama objeleri karşılaştırmak için kullanışlıdır. # için kullanışlı değildir, ama objeleri karşılaştırmak için kullanışlıdır.
# None, 0 ve boş string/list'ler False olarak değerlendirilir. # None, 0 ve boş string/list'ler False olarak değerlendirilir.
# Tüm eşitlikler True döner # Tüm eşitlikler True döner
0 == False #=> True 0 == False #=> True
"" == False #=> True "" == False #=> True
@ -122,12 +122,12 @@ some_var = 5 # Değişken isimlerinde gelenek küçük karakter ve alt çizgi
# kullanmaktır. # kullanmaktır.
some_var #=> 5 some_var #=> 5
# Daha önceden tanımlanmamış ya da assign edilmemeiş bir değişkene erişmeye # Daha önceden tanımlanmamış ya da assign edilmemeiş bir değişkene erişmeye
# çalıştığınızda bir hata fırlatılacaktır. Hata ayıklama hakkında daha fazla # çalıştığınızda bir hata fırlatılacaktır. Hata ayıklama hakkında daha fazla
# bilgi için kontrol akışı kısmına göz atınız. # bilgi için kontrol akışı kısmına göz atınız.
some_other_var # isim hatası fırlatılır some_other_var # isim hatası fırlatılır
# isterseniz "if"i bir ifade gibi kullanabilirsiniz. # isterseniz "if"i bir ifade gibi kullanabilirsiniz.
"yahoo!" if 3 > 2 else 2 #=> "yahoo!" "yahoo!" if 3 > 2 else 2 #=> "yahoo!"
# Listeler # Listeler
@ -151,7 +151,7 @@ li[0] #=> 1
li[-1] #=> 3 li[-1] #=> 3
# Listede bulunmayan bir index'teki elemana erişirken "IndexError" hatası # Listede bulunmayan bir index'teki elemana erişirken "IndexError" hatası
# fırlatılır # fırlatılır
li[4] # IndexError fırlatılır li[4] # IndexError fırlatılır
# slice syntax'ı ile belli aralıktakı değerlere bakabilirsiniz. # slice syntax'ı ile belli aralıktakı değerlere bakabilirsiniz.
@ -177,7 +177,7 @@ li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6]
# "len" ile listenin uzunluğunu bulmak # "len" ile listenin uzunluğunu bulmak
len(li) #=> 6 len(li) #=> 6
# Tüpler listeler gibidir sadece değişmezler(immutable) # Tüpler listeler gibidir sadece değişmezler(immutable)
tup = (1, 2, 3) tup = (1, 2, 3)
tup[0] #=> 1 tup[0] #=> 1
tup[0] = 3 # TypeError fırlatılır. tup[0] = 3 # TypeError fırlatılır.
@ -188,12 +188,12 @@ tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6)
tup[:2] #=> (1, 2) tup[:2] #=> (1, 2)
2 in tup #=> True 2 in tup #=> True
# Tüplerin(veya listelerin) içerisindeki değerleri değişkenelere # Tüplerin(veya listelerin) içerisindeki değerleri değişkenelere
# atanabilir # atanabilir
a, b, c = (1, 2, 3) # a şu anda 1, b şu anda 2 ve c şu anda 3 a, b, c = (1, 2, 3) # a şu anda 1, b şu anda 2 ve c şu anda 3
# Eğer parantez kullanmaz iseniz tüpler varsayılan olarak oluşturulur # Eğer parantez kullanmaz iseniz tüpler varsayılan olarak oluşturulur
d, e, f = 4, 5, 6 d, e, f = 4, 5, 6
# şimdi iki değeri değiş tokuş etmek çok kolaydır. # şimdi iki değeri değiş tokuş etmek çok kolaydır.
e, d = d, e # d şimdi 5 ve e şimdi 4 e, d = d, e # d şimdi 5 ve e şimdi 4
@ -207,24 +207,24 @@ filled_dict["one"] #=> 1
# Tüm anahtarlara(key) "keys()" metodu ile ulaşılır # Tüm anahtarlara(key) "keys()" metodu ile ulaşılır
filled_dict.keys() #=> ["three", "two", "one"] filled_dict.keys() #=> ["three", "two", "one"]
# Not - Sözlüklerin anahtarlarının sıralı geleceği garanti değildir # Not - Sözlüklerin anahtarlarının sıralı geleceği garanti değildir
# Sonuçlarınız değer listesini aldığınızda tamamen eşleşmeyebilir # Sonuçlarınız değer listesini aldığınızda tamamen eşleşmeyebilir
# Tüm değerleri almak için "values()" kullanabilirsiniz. # Tüm değerleri almak için "values()" kullanabilirsiniz.
filled_dict.values() #=> [3, 2, 1] filled_dict.values() #=> [3, 2, 1]
# Not - Sıralama ile ilgili anahtarlar ile aynı durum geçerlidir. # Not - Sıralama ile ilgili anahtarlar ile aynı durum geçerlidir.
# Bir anahtarın sözlükte oluş olmadığını "in" ile kontrol edilebilir # Bir anahtarın sözlükte oluş olmadığını "in" ile kontrol edilebilir
"one" in filled_dict #=> True "one" in filled_dict #=> True
1 in filled_dict #=> False 1 in filled_dict #=> False
# Olmayan bir anahtar çağrıldığında KeyError fırlatılır. # Olmayan bir anahtar çağrıldığında KeyError fırlatılır.
filled_dict["four"] # KeyError filled_dict["four"] # KeyError
# "get()" metodu KeyError fırlatılmasını önler # "get()" metodu KeyError fırlatılmasını önler
filled_dict.get("one") #=> 1 filled_dict.get("one") #=> 1
filled_dict.get("four") #=> None filled_dict.get("four") #=> None
# get() metodu eğer anahtar mevcut değilse varsayılan bir değer atama # get() metodu eğer anahtar mevcut değilse varsayılan bir değer atama
# imknaı sağlar. # imknaı sağlar.
filled_dict.get("one", 4) #=> 1 filled_dict.get("one", 4) #=> 1
filled_dict.get("four", 4) #=> 4 filled_dict.get("four", 4) #=> 4
@ -237,10 +237,10 @@ filled_dict.setdefault("five", 6) #filled_dict["five"] is still 5
# Sets store ... well sets # Sets store ... well sets
empty_set = set() empty_set = set()
# Bir demek değer ile bir "set" oluşturmak # Bir demek değer ile bir "set" oluşturmak
some_set = set([1,2,2,3,4]) # some_set is now set([1, 2, 3, 4]) some_set = set([1,2,2,3,4]) # some_set is now set([1, 2, 3, 4])
# Python 2.7'den beri {}'ler bir "set" tanımlaman için kullanılabilir # Python 2.7'den beri {}'ler bir "set" tanımlaman için kullanılabilir
filled_set = {1, 2, 2, 3, 4} # => {1 2 3 4} filled_set = {1, 2, 2, 3, 4} # => {1 2 3 4}
# Bir set'e daha fazla eleman eklemek # Bir set'e daha fazla eleman eklemek
@ -253,10 +253,10 @@ filled_set & other_set #=> {3, 4, 5}
# | işareti ile # | işareti ile
filled_set | other_set #=> {1, 2, 3, 4, 5, 6} filled_set | other_set #=> {1, 2, 3, 4, 5, 6}
# "-" işareti ile iki set'in farkları alınabilir # "-" işareti ile iki set'in farkları alınabilir
{1,2,3,4} - {2,3,5} #=> {1, 4} {1,2,3,4} - {2,3,5} #=> {1, 4}
# "in" ile değerin set içerisinde olup olmadığını kontrol edebilirsiniz # "in" ile değerin set içerisinde olup olmadığını kontrol edebilirsiniz
2 in filled_set #=> True 2 in filled_set #=> True
10 in filled_set #=> False 10 in filled_set #=> False
@ -268,7 +268,7 @@ filled_set | other_set #=> {1, 2, 3, 4, 5, 6}
# Bir değişken oluşturmak # Bir değişken oluşturmak
some_var = 5 some_var = 5
# Buradaki bir if ifadesi. Girintiler(Intentation) Python'da önemlidir! # Buradaki bir if ifadesi. Girintiler(Intentation) Python'da önemlidir!
# "some_var is smaller than 10" yazdırılır. # "some_var is smaller than 10" yazdırılır.
if some_var > 10: if some_var > 10:
print "some_var is totally bigger than 10." print "some_var is totally bigger than 10."
@ -286,7 +286,7 @@ Ekrana yazdırılan:
mouse is a mammal mouse is a mammal
""" """
for animal in ["dog", "cat", "mouse"]: for animal in ["dog", "cat", "mouse"]:
# Biçimlendirmeleri string'e katmak için % kullanabilirsiniz # Biçimlendirmeleri string'e katmak için % kullanabilirsiniz
print "%s is a mammal" % animal print "%s is a mammal" % animal
""" """
@ -315,7 +315,7 @@ while x < 4:
# try/except bloğu ile hatalar ayıklanabilir # try/except bloğu ile hatalar ayıklanabilir
# Python 2.6 ve üstü için çalışacaktır: # Python 2.6 ve üstü için çalışacaktır:
try: try:
# "raise" bir hata fırlatmak için kullanılabilir # "raise" bir hata fırlatmak için kullanılabilir
raise IndexError("This is an index error") raise IndexError("This is an index error")
@ -339,18 +339,18 @@ add(5, 6) #=> prints out "x is 5 and y is 6" and returns 11
# Diğer bir yol fonksiyonları anahtar argümanları ile çağırmak # Diğer bir yol fonksiyonları anahtar argümanları ile çağırmak
add(y=6, x=5) # Anahtar argümanlarının sırası farklı da olabilir add(y=6, x=5) # Anahtar argümanlarının sırası farklı da olabilir
# Değişken sayıda parametresi olan bir fonksiyon tanımlayabilirsiniz # Değişken sayıda parametresi olan bir fonksiyon tanımlayabilirsiniz
def varargs(*args): def varargs(*args):
return args return args
varargs(1, 2, 3) #=> (1,2,3) varargs(1, 2, 3) #=> (1,2,3)
# Değişken sayıda anahtar argümanlı parametre alan fonksiyonlar da # Değişken sayıda anahtar argümanlı parametre alan fonksiyonlar da
# tanımlayabilirsiniz. # tanımlayabilirsiniz.
def keyword_args(**kwargs): def keyword_args(**kwargs):
return kwargs return kwargs
# Şu şekilde kullanılacaktır # Şu şekilde kullanılacaktır
keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"} keyword_args(big="foot", loch="ness") #=> {"big": "foot", "loch": "ness"}
# Eğer isterseniz ikisini aynı anda da yapabilirsiniz # Eğer isterseniz ikisini aynı anda da yapabilirsiniz
@ -363,15 +363,15 @@ all_the_args(1, 2, a=3, b=4) prints:
{"a": 3, "b": 4} {"a": 3, "b": 4}
""" """
# Fonksiyonu çağırırken, args/kwargs'ın tam tersini de yapabilirsiniz! # Fonksiyonu çağırırken, args/kwargs'ın tam tersini de yapabilirsiniz!
# Tüpü yaymak için * ve kwargs'ı yaymak için ** kullanın. # Tüpü yaymak için * ve kwargs'ı yaymak için ** kullanın.
args = (1, 2, 3, 4) args = (1, 2, 3, 4)
kwargs = {"a": 3, "b": 4} kwargs = {"a": 3, "b": 4}
all_the_args(*args) # foo(1, 2, 3, 4) ile eşit all_the_args(*args) # foo(1, 2, 3, 4) ile eşit
all_the_args(**kwargs) # foo(a=3, b=4) ile eşit all_the_args(**kwargs) # foo(a=3, b=4) ile eşit
all_the_args(*args, **kwargs) # foo(1, 2, 3, 4, a=3, b=4) ile eşit all_the_args(*args, **kwargs) # foo(1, 2, 3, 4, a=3, b=4) ile eşit
# Python first-class fonksiyonlara sahiptir # Python first-class fonksiyonlara sahiptir
def create_adder(x): def create_adder(x):
def adder(y): def adder(y):
return x + y return x + y
@ -387,7 +387,7 @@ add_10(3) #=> 13
map(add_10, [1,2,3]) #=> [11, 12, 13] map(add_10, [1,2,3]) #=> [11, 12, 13]
filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7] filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7]
# Map etme(maps) ve filtreleme(filtres) için liste kullanabiliriz. # Map etme(maps) ve filtreleme(filtres) için liste kullanabiliriz.
[add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13] [add_10(i) for i in [1, 2, 3]] #=> [11, 12, 13]
[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7] [x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7]
@ -399,7 +399,7 @@ filter(lambda x: x > 5, [3, 4, 5, 6, 7]) #=> [6, 7]
# We subclass from object to get a class. # We subclass from object to get a class.
class Human(object): class Human(object):
# Bir sınıf özelliği. Bu sınıfın tüm "instance"larına paylaşılmıştır. # Bir sınıf özelliği. Bu sınıfın tüm "instance"larına paylaşılmıştır.
species = "H. sapiens" species = "H. sapiens"
# Basic initializer # Basic initializer
@ -408,18 +408,18 @@ class Human(object):
# değişkenine atama # değişkenine atama
self.name = name self.name = name
# Bir instance metodu. Tüm metodlar ilk argüman olarak "self" # Bir instance metodu. Tüm metodlar ilk argüman olarak "self"
# parametresini alır # parametresini alır
def say(self, msg): def say(self, msg):
return "%s: %s" % (self.name, msg) return "%s: %s" % (self.name, msg)
# Bir sınıf metodu tüm "instance"lar arasında paylaşılır # Bir sınıf metodu tüm "instance"lar arasında paylaşılır
# İlk argüman olarak sınıfı çağırarak çağrılırlar # İlk argüman olarak sınıfı çağırarak çağrılırlar
@classmethod @classmethod
def get_species(cls): def get_species(cls):
return cls.species return cls.species
# Bir statik metod bir sınıf ya da instance referansı olmadan çağrılır # Bir statik metod bir sınıf ya da instance referansı olmadan çağrılır
@staticmethod @staticmethod
def grunt(): def grunt():
return "*grunt*" return "*grunt*"
@ -452,24 +452,24 @@ Human.grunt() #=> "*grunt*"
import math import math
print math.sqrt(16) #=> 4.0 print math.sqrt(16) #=> 4.0
# Modül içerisinden spesifik bir fonksiyonu getirebilirsiniz # Modül içerisinden spesifik bir fonksiyonu getirebilirsiniz
from math import ceil, floor from math import ceil, floor
print ceil(3.7) #=> 4.0 print ceil(3.7) #=> 4.0
print floor(3.7) #=> 3.0 print floor(3.7) #=> 3.0
# Modüldeki tüm fonksiyonları dahil edebilirsiniz # Modüldeki tüm fonksiyonları dahil edebilirsiniz
# Uyarı: bu önerilmez # Uyarı: bu önerilmez
from math import * from math import *
# Modülün adını kısaltabilirsiniz # Modülün adını kısaltabilirsiniz
import math as m import math as m
math.sqrt(16) == m.sqrt(16) #=> True math.sqrt(16) == m.sqrt(16) #=> True
# Python modülleri sıradan python dosyalarıdır. Kendinize bir modül # Python modülleri sıradan python dosyalarıdır. Kendinize bir modül
# yazabilirsiniz, ve dahil edebilirsiniz. Modülün adı ile dosya adı # yazabilirsiniz, ve dahil edebilirsiniz. Modülün adı ile dosya adı
# aynı olmalıdır. # aynı olmalıdır.
# Modüllerde tanımlanmış fonksiyon ve metodları öğrenebilirsiniz. # Modüllerde tanımlanmış fonksiyon ve metodları öğrenebilirsiniz.
import math import math
dir(math) dir(math)
``` ```

View File

@ -16,7 +16,7 @@ Bài hướng dẫn này sử dụng SCSS.
Nếu bạn đọc đã quen thuộc với CSS3 thì sẽ tương đối nhanh chóng để nắm được Sass. Nó không cung cấp thuộc tính để style CSS mới nhưng đưa ra những công cụ để có thể viết CSS hiệu quả hơn và có thể bảo trì dễ dàng hơn. Nếu bạn đọc đã quen thuộc với CSS3 thì sẽ tương đối nhanh chóng để nắm được Sass. Nó không cung cấp thuộc tính để style CSS mới nhưng đưa ra những công cụ để có thể viết CSS hiệu quả hơn và có thể bảo trì dễ dàng hơn.
```sass ```scss
// Comment (chú thích) một dòng sẽ bị xóa khi Less được biên dịch thành CSS // Comment (chú thích) một dòng sẽ bị xóa khi Less được biên dịch thành CSS
/* Comment trên nhiều dòng sẽ được giữ lại */ /* Comment trên nhiều dòng sẽ được giữ lại */

View File

@ -139,6 +139,6 @@ Manipulate[y^2, {y, 0, 20}] (* Return a reactive user interface that displays y^
Only works on graphical frontends *) Only works on graphical frontends *)
``` ```
##Ready For More? ## Further reading
* [Wolfram Language Documentation Center](http://reference.wolfram.com/language/) * [Wolfram Language Documentation Center](http://reference.wolfram.com/language/)

View File

@ -620,5 +620,5 @@ nil ; 逻辑假,或者空列表
同时也感谢 同时也感谢
- [Paul Khuong](https://github.com/pkhuong) ,他提出了很多有用的点评。 - [Paul Khuong](https://github.com/pkhuong) ,他提出了很多有用的点评。
##译者寄语 ## 译者寄语
“祝福那些将思想镶嵌在重重括号之内的人们。” “祝福那些将思想镶嵌在重重括号之内的人们。”

View File

@ -53,15 +53,15 @@ translators:
t<字符> # 向前跳移到 <字符> 的左侧 t<字符> # 向前跳移到 <字符> 的左侧
# 例如, # 例如,
   f<               # 向前跳移到 < f< # 向前跳移到 <
t< # 向前跳移到 < 的左侧 t< # 向前跳移到 < 的左侧
# 按词移动 # 按词移动
# 默认一个单词由字母,数字和下划线组成 # 默认一个单词由字母,数字和下划线组成
   w               # 移动到下一个词首 w # 移动到下一个词首
   b               # 移动到前一个词首 b # 移动到前一个词首
   e               # 移动到下一个词尾 e # 移动到下一个词尾
# 移动的其它命令 # 移动的其它命令

View File

@ -30,7 +30,7 @@ VDEV的类型
数据会以条带方式存储于存储池中的所有VDEV上。因此一个存储池中的VDEV越多IOPS就越高。 数据会以条带方式存储于存储池中的所有VDEV上。因此一个存储池中的VDEV越多IOPS就越高。
### storage pool (存储池) ### storage pool (存储池)
ZFS 使用存储池来作为底层存储提供者VDEV的抽象。这样可以把用户可见的文件系统和底层的物理磁盘 ZFS 使用存储池来作为底层存储提供者VDEV的抽象。这样可以把用户可见的文件系统和底层的物理磁盘
布局分离开来。 布局分离开来。