#(define qwer (lambda (x y)))
gosh> (qwer 'a 'a)
2
なのに
gosh> ((lambda (x y)) 'a 'a)
0
なのは何故でしょうか。
#未定義動作だからです。多分Gaucheの場合は、そのときVMレジスタに偶然残っていた値が返ります。
#Scheme (rnrs) 的には、lambdaの中に最低一つの式が必要です。なのでエラーなんですが、Gaucheはあんまりエラーにうるさくありません。で、空のbodyでなにが起きているかというと…
#gosh> (define qwer (lambda (x y)))
qwer
gosh> (disasm qwer)
CLOSURE #<closure (qwer x y)>
=== main_code (name=qwer, cc=0x7f94e6453780, codevec=0x7f94e645bb50, size=1, const=0 stack=0):
signatureInfo: ((qwer x y))
0 RET
#本体がreturnだけの手続きにコンパイルされているので、偶然レジスタに残っていた値が戻り値として見えます。