Change quasiquote algorithm
authorNicolas Boulenguez <nicolas.boulenguez@free.fr>
Tue, 21 Jul 2020 16:01:48 +0000 (18:01 +0200)
committerNicolas Boulenguez <nicolas.boulenguez@free.fr>
Mon, 10 Aug 2020 23:01:56 +0000 (01:01 +0200)
commitfbfe6784d2db983018340e4e1492d8d017029867
tree9f1f6c7fb4cabfa4a0519a2448176b05f714a7ee
parentece70f970306f819b148979c3d17f266c7e08146
Change quasiquote algorithm

- Add a `vec` built-in function in step7 so that `quasiquote` does not
  require `apply` from step9.
- Introduce quasiquoteexpand special in order to help debugging step7.
  This may also prepare newcomers to understand step8.
- Add soft tests.
- Do not quote numbers, strings and so on.

Should ideally have been in separate commits:
- elisp: simplify and fix (keyword :k)
- factor: fix copy/paste error in let*/step7, simplify eval-ast.
- guile: improve list/vector types
- haskell: revert evaluation during quasiquote
- logo, make: cosmetic issues
467 files changed:
docs/exercises.md
examples/exercises.mal
impls/ada.2/core.adb
impls/ada.2/step7_quote.adb
impls/ada.2/step8_macros.adb
impls/ada.2/step9_try.adb
impls/ada.2/stepa_mal.adb
impls/ada.2/types-sequences.adb
impls/ada.2/types-sequences.ads
impls/ada/core.adb
impls/ada/step7_quote.adb
impls/ada/step8_macros.adb
impls/ada/step9_try.adb
impls/ada/stepa_mal.adb
impls/awk/core.awk
impls/awk/step7_quote.awk
impls/awk/step8_macros.awk
impls/awk/step9_try.awk
impls/awk/stepA_mal.awk
impls/bash/core.sh
impls/bash/step7_quote.sh
impls/bash/step8_macros.sh
impls/bash/step9_try.sh
impls/bash/stepA_mal.sh
impls/bash/types.sh
impls/basic/core.in.bas
impls/basic/step4_if_fn_do.in.bas
impls/basic/step5_tco.in.bas
impls/basic/step6_file.in.bas
impls/basic/step7_quote.in.bas
impls/basic/step8_macros.in.bas
impls/basic/step9_try.in.bas
impls/basic/stepA_mal.in.bas
impls/bbc-basic/core.bas
impls/bbc-basic/step7_quote.bas
impls/bbc-basic/step8_macros.bas
impls/bbc-basic/step9_try.bas
impls/bbc-basic/stepA_mal.bas
impls/c/core.c
impls/c/core.h
impls/c/step7_quote.c
impls/c/step8_macros.c
impls/c/step9_try.c
impls/c/stepA_mal.c
impls/chuck/core.ck
impls/chuck/step7_quote.ck
impls/chuck/step8_macros.ck
impls/chuck/step9_try.ck
impls/chuck/stepA_mal.ck
impls/chuck/types/subr/MalVec.ck [new file with mode: 0644]
impls/clojure/src/mal/core.cljc
impls/clojure/src/mal/step7_quote.cljc
impls/clojure/src/mal/step8_macros.cljc
impls/clojure/src/mal/step9_try.cljc
impls/clojure/src/mal/stepA_mal.cljc
impls/coffee/core.coffee
impls/coffee/step7_quote.coffee
impls/coffee/step8_macros.coffee
impls/coffee/step9_try.coffee
impls/coffee/stepA_mal.coffee
impls/common-lisp/src/core.lisp
impls/common-lisp/src/step7_quote.lisp
impls/common-lisp/src/step8_macros.lisp
impls/common-lisp/src/step9_try.lisp
impls/common-lisp/src/stepA_mal.lisp
impls/cpp/Core.cpp
impls/cpp/step7_quote.cpp
impls/cpp/step8_macros.cpp
impls/cpp/step9_try.cpp
impls/cpp/stepA_mal.cpp
impls/crystal/core.cr
impls/crystal/step7_quote.cr
impls/crystal/step8_macros.cr
impls/crystal/step9_try.cr
impls/crystal/stepA_mal.cr
impls/cs/core.cs
impls/cs/step7_quote.cs
impls/cs/step8_macros.cs
impls/cs/step9_try.cs
impls/cs/stepA_mal.cs
impls/d/mal_core.d
impls/d/step7_quote.d
impls/d/step8_macros.d
impls/d/step9_try.d
impls/d/stepA_mal.d
impls/dart/core.dart
impls/dart/step7_quote.dart
impls/dart/step8_macros.dart
impls/dart/step9_try.dart
impls/dart/stepA_mal.dart
impls/elisp/mal/core.el
impls/elisp/mal/printer.el
impls/elisp/mal/reader.el
impls/elisp/step1_read_print.el
impls/elisp/step2_eval.el
impls/elisp/step3_env.el
impls/elisp/step4_if_fn_do.el
impls/elisp/step5_tco.el
impls/elisp/step6_file.el
impls/elisp/step7_quote.el
impls/elisp/step8_macros.el
impls/elisp/step9_try.el
impls/elisp/stepA_mal.el
impls/elixir/lib/mal/core.ex
impls/elixir/lib/mix/tasks/step7_quote.ex
impls/elixir/lib/mix/tasks/step8_macros.ex
impls/elixir/lib/mix/tasks/step9_try.ex
impls/elixir/lib/mix/tasks/stepA_mal.ex
impls/elm/Core.elm
impls/elm/step7_quote.elm
impls/elm/step8_macros.elm
impls/elm/step9_try.elm
impls/elm/stepA_mal.elm
impls/erlang/src/core.erl
impls/erlang/src/step7_quote.erl
impls/erlang/src/step8_macros.erl
impls/erlang/src/step9_try.erl
impls/erlang/src/stepA_mal.erl
impls/es6/core.mjs
impls/es6/step7_quote.mjs
impls/es6/step8_macros.mjs
impls/es6/step9_try.mjs
impls/es6/stepA_mal.mjs
impls/factor/lib/core/core.factor
impls/factor/step2_eval/step2_eval.factor
impls/factor/step3_env/step3_env.factor
impls/factor/step4_if_fn_do/step4_if_fn_do.factor
impls/factor/step5_tco/step5_tco.factor
impls/factor/step6_file/step6_file.factor
impls/factor/step7_quote/step7_quote.factor
impls/factor/step8_macros/step8_macros.factor
impls/factor/step9_try/step9_try.factor
impls/factor/stepA_mal/stepA_mal.factor
impls/fantom/src/mallib/fan/core.fan
impls/fantom/src/step7_quote/fan/main.fan
impls/fantom/src/step8_macros/fan/main.fan
impls/fantom/src/step9_try/fan/main.fan
impls/fantom/src/stepA_mal/fan/main.fan
impls/forth/core.fs
impls/forth/step7_quote.fs
impls/forth/step8_macros.fs
impls/forth/step9_try.fs
impls/forth/stepA_mal.fs
impls/fsharp/core.fs
impls/fsharp/env.fs
impls/fsharp/step7_quote.fs
impls/fsharp/step8_macros.fs
impls/fsharp/step9_try.fs
impls/fsharp/stepA_mal.fs
impls/gnu-smalltalk/core.st
impls/gnu-smalltalk/step7_quote.st
impls/gnu-smalltalk/step8_macros.st
impls/gnu-smalltalk/step9_try.st
impls/gnu-smalltalk/stepA_mal.st
impls/gnu-smalltalk/types.st
impls/go/src/core/core.go
impls/go/src/step7_quote/step7_quote.go
impls/go/src/step8_macros/step8_macros.go
impls/go/src/step9_try/step9_try.go
impls/go/src/stepA_mal/stepA_mal.go
impls/groovy/core.groovy
impls/groovy/step7_quote.groovy
impls/groovy/step8_macros.groovy
impls/groovy/step9_try.groovy
impls/groovy/stepA_mal.groovy
impls/guile/core.scm
impls/guile/step7_quote.scm
impls/guile/step8_macros.scm
impls/guile/step9_try.scm
impls/guile/stepA_mal.scm
impls/haskell/Core.hs
impls/haskell/step7_quote.hs
impls/haskell/step8_macros.hs
impls/haskell/step9_try.hs
impls/haskell/stepA_mal.hs
impls/haxe/Step7_quote.hx
impls/haxe/Step8_macros.hx
impls/haxe/Step9_try.hx
impls/haxe/StepA_mal.hx
impls/haxe/core/Core.hx
impls/hy/core.hy
impls/hy/step7_quote.hy
impls/hy/step8_macros.hy
impls/hy/step9_try.hy
impls/hy/stepA_mal.hy
impls/io/MalCore.io
impls/io/step7_quote.io
impls/io/step8_macros.io
impls/io/step9_try.io
impls/io/stepA_mal.io
impls/java/src/main/java/mal/core.java
impls/java/src/main/java/mal/step7_quote.java
impls/java/src/main/java/mal/step8_macros.java
impls/java/src/main/java/mal/step9_try.java
impls/java/src/main/java/mal/stepA_mal.java
impls/jq/core.jq
impls/jq/step7_quote.jq
impls/jq/step8_macros.jq
impls/jq/step9_try.jq
impls/jq/stepA_mal.jq
impls/jq/utils.jq
impls/js/core.js
impls/js/step7_quote.js
impls/js/step8_macros.js
impls/js/step9_try.js
impls/js/stepA_mal.js
impls/julia/core.jl
impls/julia/step7_quote.jl
impls/julia/step8_macros.jl
impls/julia/step9_try.jl
impls/julia/stepA_mal.jl
impls/kotlin/src/mal/core.kt
impls/kotlin/src/mal/step7_quote.kt
impls/kotlin/src/mal/step8_macros.kt
impls/kotlin/src/mal/step9_try.kt
impls/kotlin/src/mal/stepA_mal.kt
impls/livescript/core.ls
impls/livescript/step7_quote.ls
impls/livescript/step8_macros.ls
impls/livescript/step9_try.ls
impls/livescript/stepA_mal.ls
impls/logo/core.lg
impls/logo/step7_quote.lg
impls/logo/step8_macros.lg
impls/logo/step9_try.lg
impls/logo/stepA_mal.lg
impls/logo/types.lg
impls/lua/core.lua
impls/lua/step7_quote.lua
impls/lua/step8_macros.lua
impls/lua/step9_try.lua
impls/lua/stepA_mal.lua
impls/make/core.mk
impls/make/step7_quote.mk
impls/make/step8_macros.mk
impls/make/step9_try.mk
impls/make/stepA_mal.mk
impls/make/types.mk
impls/mal/core.mal
impls/mal/step2_eval.mal
impls/mal/step3_env.mal
impls/mal/step4_if_fn_do.mal
impls/mal/step6_file.mal
impls/mal/step7_quote.mal
impls/mal/step8_macros.mal
impls/mal/step9_try.mal
impls/mal/stepA_mal.mal
impls/matlab/core.m
impls/matlab/step7_quote.m
impls/matlab/step8_macros.m
impls/matlab/step9_try.m
impls/matlab/stepA_mal.m
impls/miniMAL/core.json
impls/miniMAL/step7_quote.json
impls/miniMAL/step8_macros.json
impls/miniMAL/step9_try.json
impls/miniMAL/stepA_mal.json
impls/nasm/core.asm
impls/nasm/step7_quote.asm
impls/nasm/step8_macros.asm
impls/nasm/step9_try.asm
impls/nasm/stepA_mal.asm
impls/nim/core.nim
impls/nim/step7_quote.nim
impls/nim/step8_macros.nim
impls/nim/step9_try.nim
impls/nim/stepA_mal.nim
impls/objc/Dockerfile
impls/objc/core.m
impls/objc/step7_quote.m
impls/objc/step8_macros.m
impls/objc/step9_try.m
impls/objc/stepA_mal.m
impls/objpascal/core.pas
impls/objpascal/step7_quote.pas
impls/objpascal/step8_macros.pas
impls/objpascal/step9_try.pas
impls/objpascal/stepA_mal.pas
impls/ocaml/Dockerfile
impls/ocaml/core.ml
impls/ocaml/step7_quote.ml
impls/ocaml/step8_macros.ml
impls/ocaml/step9_try.ml
impls/ocaml/stepA_mal.ml
impls/perl/core.pm
impls/perl/step7_quote.pl
impls/perl/step8_macros.pl
impls/perl/step9_try.pl
impls/perl/stepA_mal.pl
impls/perl6/core.pm
impls/perl6/step7_quote.pl
impls/perl6/step8_macros.pl
impls/perl6/step9_try.pl
impls/perl6/stepA_mal.pl
impls/php/core.php
impls/php/step7_quote.php
impls/php/step8_macros.php
impls/php/step9_try.php
impls/php/stepA_mal.php
impls/picolisp/core.l
impls/picolisp/step7_quote.l
impls/picolisp/step8_macros.l
impls/picolisp/step9_try.l
impls/picolisp/stepA_mal.l
impls/pike/Core.pmod
impls/pike/step7_quote.pike
impls/pike/step8_macros.pike
impls/pike/step9_try.pike
impls/pike/stepA_mal.pike
impls/plpgsql/core.sql
impls/plpgsql/step7_quote.sql
impls/plpgsql/step8_macros.sql
impls/plpgsql/step9_try.sql
impls/plpgsql/stepA_mal.sql
impls/plsql/core.sql
impls/plsql/step7_quote.sql
impls/plsql/step8_macros.sql
impls/plsql/step9_try.sql
impls/plsql/stepA_mal.sql
impls/powershell/core.psm1
impls/powershell/step7_quote.ps1
impls/powershell/step8_macros.ps1
impls/powershell/step9_try.ps1
impls/powershell/stepA_mal.ps1
impls/ps/core.ps
impls/ps/step7_quote.ps
impls/ps/step8_macros.ps
impls/ps/step9_try.ps
impls/ps/stepA_mal.ps
impls/python.2/core.py
impls/python.2/step7_quote.py
impls/python.2/step8_macros.py
impls/python.2/step9_try.py
impls/python.2/stepA_mal.py
impls/python/core.py
impls/python/step7_quote.py
impls/python/step8_macros.py
impls/python/step9_try.py
impls/python/stepA_mal.py
impls/r/core.r
impls/r/step7_quote.r
impls/r/step8_macros.r
impls/r/step9_try.r
impls/r/stepA_mal.r
impls/racket/core.rkt
impls/racket/step7_quote.rkt
impls/racket/step8_macros.rkt
impls/racket/step9_try.rkt
impls/racket/stepA_mal.rkt
impls/rexx/core.rexx
impls/rexx/step7_quote.rexx
impls/rexx/step8_macros.rexx
impls/rexx/step9_try.rexx
impls/rexx/stepA_mal.rexx
impls/rpython/core.py
impls/rpython/step7_quote.py
impls/rpython/step8_macros.py
impls/rpython/step9_try.py
impls/rpython/stepA_mal.py
impls/ruby/core.rb
impls/ruby/step7_quote.rb
impls/ruby/step8_macros.rb
impls/ruby/step9_try.rb
impls/ruby/stepA_mal.rb
impls/rust/core.rs
impls/rust/step7_quote.rs
impls/rust/step8_macros.rs
impls/rust/step9_try.rs
impls/rust/stepA_mal.rs
impls/scala/core.scala
impls/scala/step7_quote.scala
impls/scala/step8_macros.scala
impls/scala/step9_try.scala
impls/scala/stepA_mal.scala
impls/scheme/lib/core.sld
impls/scheme/step7_quote.scm
impls/scheme/step8_macros.scm
impls/scheme/step9_try.scm
impls/scheme/stepA_mal.scm
impls/skew/core.sk
impls/skew/step7_quote.sk
impls/skew/step8_macros.sk
impls/skew/step9_try.sk
impls/skew/stepA_mal.sk
impls/swift/core.swift
impls/swift/step7_quote.swift
impls/swift/step8_macros.swift
impls/swift/step9_try.swift
impls/swift/stepA_mal.swift
impls/swift3/Sources/core.swift
impls/swift3/Sources/step7_quote/main.swift
impls/swift3/Sources/step8_macros/main.swift
impls/swift3/Sources/step9_try/main.swift
impls/swift3/Sources/stepA_mal/main.swift
impls/swift4/Sources/core.swift
impls/swift4/Sources/step7_quote/main.swift
impls/swift4/Sources/step8_macros/main.swift
impls/swift4/Sources/step9_try/main.swift
impls/swift4/Sources/stepA_mal/main.swift
impls/swift5/Sources/core/Core.swift
impls/swift5/Sources/step7_quote/main.swift
impls/swift5/Sources/step8_macros/main.swift
impls/swift5/Sources/step9_try/main.swift
impls/swift5/Sources/stepA_mal/main.swift
impls/tcl/core.tcl
impls/tcl/step7_quote.tcl
impls/tcl/step8_macros.tcl
impls/tcl/step9_try.tcl
impls/tcl/stepA_mal.tcl
impls/tests/step7_quote.mal
impls/tests/step8_macros.mal
impls/ts/core.ts
impls/ts/step7_quote.ts
impls/ts/step8_macros.ts
impls/ts/step9_try.ts
impls/ts/stepA_mal.ts
impls/vala/core.vala
impls/vala/step7_quote.vala
impls/vala/step8_macros.vala
impls/vala/step9_try.vala
impls/vala/stepA_mal.vala
impls/vala/types.vala
impls/vb/core.vb
impls/vb/step7_quote.vb
impls/vb/step8_macros.vb
impls/vb/step9_try.vb
impls/vb/stepA_mal.vb
impls/vhdl/core.vhdl
impls/vhdl/step7_quote.vhdl
impls/vhdl/step8_macros.vhdl
impls/vhdl/step9_try.vhdl
impls/vhdl/stepA_mal.vhdl
impls/vimscript/core.vim
impls/vimscript/step7_quote.vim
impls/vimscript/step8_macros.vim
impls/vimscript/step9_try.vim
impls/vimscript/stepA_mal.vim
impls/wasm/core.wam
impls/wasm/step7_quote.wam
impls/wasm/step8_macros.wam
impls/wasm/step9_try.wam
impls/wasm/stepA_mal.wam
impls/wren/core.wren
impls/wren/step7_quote.wren
impls/wren/step8_macros.wren
impls/wren/step9_try.wren
impls/wren/stepA_mal.wren
impls/xslt/core.xslt
impls/xslt/step7_quote.inc.xslt
impls/xslt/step8_macros.inc.xslt
impls/xslt/step9_try.inc.xslt
impls/xslt/stepA_mal.inc.xslt
impls/yorick/core.i
impls/yorick/step7_quote.i
impls/yorick/step8_macros.i
impls/yorick/step9_try.i
impls/yorick/stepA_mal.i
impls/zig/core.zig
impls/zig/step7_quote.zig
impls/zig/step8_macros.zig
impls/zig/step9_try.zig
impls/zig/stepA_mal.zig
process/guide.md
process/step7_quote.txt
process/step8_macros.txt
process/step9_try.txt
process/stepA_mal.txt