I believe that I maybe found a bug in the compiler.
Steps to reproduce:
cat > puzzle.cl <<EOF
(mod params
(defun ident (arg)
(f (list arg))
)
(ident (ident params))
)
EOF
run puzzle.cl
Expected result:
I expect a CLVM puzzle to be written to stdout, which would output its solution when passed to brun (i.e. "identity puzzle").
Actual results:
The run command fails with the following message:
FAIL: first of non-cons 1
Some more insight:
When I modify the puzzle in either one of the following ways, then it translates and the resulting CLVM behaves as expected:
(f (list arg)) -> (f arg)
(f (list arg)) -> (list arg)
(f (list arg)) -> (f (f arg))
(f (list arg)) -> (list (list arg))
(f (list arg)) -> (list (f arg))
(ident (ident params)) -> (ident params)
(mod params ...) -> (mod (params) ...)
Please note that the documentation admits any of the following possibilities:
(mod params ...)
(mod (param_one param_two) ...)
(mod ((param)) ...)
Quoting https://chialisp.com/docs/high_level_lang#squaring-a-list:
You can name each parameter in a list or you can name the list itself. This works at any place where you name parameters, and allows you to handle lists where you aren't sure of the size.
I believe that I maybe found a bug in the compiler.
Steps to reproduce:
Expected result:
I expect a CLVM puzzle to be written to stdout, which would output its solution when passed to
brun(i.e. "identity puzzle").Actual results:
The
runcommand fails with the following message:Some more insight:
When I modify the puzzle in either one of the following ways, then it translates and the resulting CLVM behaves as expected:
(f (list arg))->(f arg)(f (list arg))->(list arg)(f (list arg))->(f (f arg))(f (list arg))->(list (list arg))(f (list arg))->(list (f arg))(ident (ident params))->(ident params)(mod params ...)->(mod (params) ...)Please note that the documentation admits any of the following possibilities:
(mod params ...)(mod (param_one param_two) ...)(mod ((param)) ...)Quoting https://chialisp.com/docs/high_level_lang#squaring-a-list: