Как реализовать в качестве функции лямбда в схеме

StackOverflow https://stackoverflow.com/questions/5059841

  •  15-11-2019
  •  | 
  •  

Вопрос

как упражнение, которое я пытаюсь определить, пусть лямбда функция что-то подобное:

(define let_as_lambda 
  (lambda (var) 
     (lambda (value body) 
       (var body) val)))
.

И я надеюсь назвать это так:

((let_as_lambda a) (3 (+ a 2)))
.

Однако нет способа передавать несвязанную переменную (в этом случае «A») в качестве аргумента для функции.(Я знаю, что это выглядит немного странно, но мне нужно let_as_lambda (var), чтобы вернуть функцию.)

Может кто-нибудь показать мне, как это сделать?Любой совет ценится.

на самом деле, просто используя это лямбда-эквивалентное выражение:

(let ((p1 v1) (p2 v2)...) body) = ((lambda (p1 p2...) body) v1 v2...)
.

Я не могу даже получить это на работу:

(define let_as_lambda 
    (lambda (var val body) 
      ((var body) val)))
.

Вызывается: (let_as_lambda a 3 (+ a 2))

без получения той же жалобы:

Ссылка на идентификатор перед его определением: A

Это было полезно?

Решение

let is a syntatic extension defined in terms of lambda. I don't think you can define it as a function. Take a look at the example from The Scheme Programming Language

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top