LINUX.ORG.RU

scheme + ;ambda


0

0

Например есть функция:

(define (test . args) (if (null? atgs) (display "args is null.") (map display args)))

Как ее записать через lambda?

Так не компилится: (define test (lambda (. args) (if (null? atgs) (display "args is null.") (map display args))))

anonymous

Встает вопрос, а зачем записывать через лямбду? Ведь в итоге одно и то же.

А не компилится из-за точки.

stassats ★★★★
()
Ответ на: комментарий от tche

Это не то.

В guile у меня работает:

guile> (define test (lambda (. args) (if (null? args) (display "args is null.") (map display args))))

guile> (test)

args is null.guile>

guile> (test 1 2)

12(#<unspecified> #<unspecified>)

Какая у тебя реализация схемы?

anonymous
()
Ответ на: комментарий от anonymous

>Это не то.

А, извиняюсь, отсутствие скобок вокруг args не заметил

anonymous
()
Ответ на: комментарий от anonymous

Вообще по моим наблюдениям, (lambda args ......) работает везде, а (lambda (.args) ......) кое-где не работает. В MzScheme, например.

tche
()
Ответ на: комментарий от anonymous

>В guile у меня работает:

Сейчас глянул в R5RS, оказывается это нестандарная фича, перед точкой должен быть хотя бы 1 аргумент (согласно R5RS).

anonymous
()
Ответ на: комментарий от stassats

Да просто интересно.

Всем спасибо за ответы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.