, поэтому я пытаюсь поэкспериментировать с некоторым кодом и изменять между двумя методами выражения схемы let и lambda.Схема: конвертировать из Let to Lambda
код у меня выглядит следующим образом:
(let splice ((l '()) (m (car s)) (r (cdr s)))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(splice (cons m l) (car r) (cdr r)))))
Я пытаюсь изменить внешний пусть определений формате лямбда, но это немного сбивает с толку из-за вложенной природы кода , То, что я пытался сделать до сих пор:
(lambda (splice (l m r))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(cut (cons m l) (car r) (cdr r)))))
(('()) (car upList) (cdr upList))
Это явно не так, но я не знаю, как поступить дальше ...
Вы почти правы: с лямбды не имеют имен, ваш список args неверен (это должно быть '(lambda (lmr) ...)'), и вам нужно назначить его привязке, возможно, с 'letrec'. Затем вы хотите вызвать его с использованием этого имени, передав ему начальные аргументы. –
Спасибо, я попробую! Как насчет внутреннего блока, такого как '(splice (cons m l) (car r) (cdr r))', где рекурсивно используются определения let? Будут ли они работать с привязанной лямбдой или будут ли они нуждаться в дальнейшем изменении? – Starscreen60