kmyk-jikka / Jikka

an automated solver for problems of competitive programming
https://kmyk-jikka.github.io/Jikka/playground
Apache License 2.0
152 stars 11 forks source link

Internal Error on `sum(sorted(map(lambda x: x + 1, xs)))` #222

Closed kmyk closed 2 years ago

kmyk commented 2 years ago

Summary / 概要

簡単なコードのはずなのになぜかエラーになる。 @soraiemame さんが見つけてくれました

Steps to reproduce / 再現方法

以下のコードを変換する:

def solve(xs: List[int]) -> int:
    return sum(sorted(map(lambda x: x + 1, xs)))

environments:

Expected behavior / 期待される挙動

Actual behavior / 実際の挙動

Internal Error (implementation's bug?): Jikka.Core.Convert.TypeInfer: failed to solve type equations: failed to unify $43 and int list: different type ctors int and 
int list
zer0-star commented 2 years ago

これについて少し原因を探ってみたのですが、RestrictedPythonからCoreに変換する過程で、mapの内部でgo0に渡される引数をxs_k[i]とすべきところをxs_kのままにしてしまっているようです(bodyのところです)

https://github.com/kmyk/Jikka/blob/af3bc160a7bb9b10082c03f3e897f13716474a28/src/Jikka/RestrictedPython/Convert/ToCore.hs#L107-L116

ここを修正したら一応ちゃんと動くようになりました(テストは走らせていませんが)

kmyk commented 2 years ago

これ天才です。 xs_k を付けて満足して [i] の部分を忘れてたんだと思います。k の変数にも i の変数にも両方 i って使ってて、書いたとき混乱してた感じがしますね。

@zer0-star せっかくなのでよければプルリクもお願いします (テストは GitHub 上で自動で実行されるので手元では動くのを確認する程度で大丈夫です)

zer0-star commented 2 years ago

OKです、やっておきます