2013-05-15 2 views
1

Мне было интересно, может ли кто-нибудь объяснить это выражение лямбда и как получается вывод. Я положил его в интерпретатор и получаю ((2) 2). Я просто не уверен, почему это дает мне это, а не только (2 2).Объяснение выражения лямбда в схеме

((lambda x (cons x x)) 2) 
+0

Это функция, которая всегда возвращает '6'. Пожалуйста, покажите код. –

+0

мой appoligizes, неправильно вписывается в буфер обмена, обновляется строка –

ответ

5

Выражение (lambda x (cons x x)) создает функцию; функция помещает все аргументы в список x; функция возвращает (cons x x).

Ваше выражение вызывает указанную выше функцию с аргументом 2. В функции x находится (2) (список всех аргументов). Функция возвращает (cons '(2) '(2))((2) 2)

+0

, почему у кого есть (2), а у другого всего 2? –

+0

Потому что '(cons thing '(2))' производит '' (вещь 2)'. По существу «cons» предназначен для расширения списка. – GoZoner

+0

Я все еще не совсем понимаю, что происходит, извините. –

1
(cons x x) 

не то же самое, как

(list x x) 

, поскольку он производит пунктирные пары, например, (cons 2 2)(2 . 2).

Но когда правая сторона пунктирной пары является списком, все это список. (lambda x expr) принимает произвольное количество аргументов, помещает их в список x, так что это (2) здесь. Пунктирная пара ((2) . (2)) напечатана как ((2) 2) по условным обозначениям Лиспа.

0

Да, вы сбежали с глубокого конца схемы.

Вы заполнили нотацию, которая позволяет вам написать функцию, которая принимает ноль или более аргументов. (любое число действительно)

(define add-nums 
(lambda x 
    (if (null? x) 
     0 
     (+ (car x) (apply add-nums (cdr x)))))) 

(add-nums 1 87 203 87 2 4 5) 

;Value: 389 

Если вам просто нужен один аргумент, вам нужно заключить х в набор круглых скобок.

И вы хотите использовать

(список хх)

или

(минусы х (минусы х «())

как тело функции, как правильно сформированного списка будет иметь пустой список в положении хвоста.

0

Возможно, вы хотели написать:

((lambda (x) (cons x x)) 2) 

(обратите внимание на скобки вокруг x).