Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Проблема с арностью

Прошлые проблемы, вроде как, удалось преодолеть. Проверил три падающих теста (потом задолбался) - во всех одна и та же новая проблема.

flipped x = {
   f = sum
   f 3 x
}
В переводе на нормальный синтаксис - это let f = sum in f 3 x.

Оптимизатор видит, что f вызывается постоянно с одними и теми же аргументами (1 раз из 1), и решает, что раз так - то эти аргументы в месте вызова не нужны, и стирает их. Так и нужно поступать, если f - лямбда. Но в данном случае получается let f = sum in f, беда.

Буду думать завтра, что с этим делать. Варианта два:

1) Пытаться в рамках текущих проходов сделать let f = sum 3 x in f. В том месте, где переписываем тело, выяснить, что формальных аргументов 0, а фактических больше, ирт сделать аппликацию.

2) Делать ещё один обратный проход, 4-й некомпозабельный проход для жалкого инлайнинга аргументов, Карл. Задать арность каждого узла в виде [Bot, Bot], и затем следить за нарушениями.
Tags: hn0
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments