Haskell Help - Превращение термина в выражение суперкомбинатора - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь создать функцию, которая принимает член в качестве входных данных:

data Term =
    Variable Var
  | Lambda   Var  Term
  | Apply    Term Term
  --deriving Show

И этим функция superCombinator должна заменить все подтермы формы Lambdax1. ..Lambdaxn.N по ее поднятию , а также по аналогии с подтермами в N. (см. lift функция):

lift :: Term -> Term
lift v = applications (abstractions v (free v)) [Variable v | v <- (free v)]

Пока у меня есть следующий код, но я застрял на том, как вернуть N из абстракции Lambdax1 ... Lambdaxn.N. Как мне go сделать это?

someFunction :: Term -> Term
someFunction = undefined
--have a term of the form lambdax1....lambdaxn.N - Need to find and return N...

super :: Term -> Term
super v = lift (someFunction (abstractions v (free v)))

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 03 мая 2020

Вы ищете следующую рекурсию, или я неправильно понял?

someFunction (Lambda _ t) = someFunction t
someFunction t = t

, которая дает:

> someFunction (Lambda "x1" (Lambda "x2" (Apply (Variable "x1") (Variable "x2"))))
Apply (Variable "x1") (Variable "x2")

Обратите внимание, что другой опубликованный вами код, по-видимому, отсутствует рекурсия Я не понимаю, как это поднимет какие-то подтермы.

...