Pull to refresh

Comments 10

UFO just landed and posted this here
UFO just landed and posted this here
Под рукой нет Racket, думаю, причина в том, что в примере юникод, т.е. 2 байта, а Racket поддерживает Ascii, т.е. должно быть #\xE5 для лямбды.
$ racket
Welcome to Racket v6.2.1.
> (λ (x) x + 1)
#<procedure>
UFO just landed and posted this here
UFO just landed and posted this here
Ошибки нет, наверно 0 сбивает с толку привыкших к си, в Scheme истина все кроме #f. Результат and и or это либо ложь, либо значение истинного аргумента. Например, (and #f 11 22 33); => #f, при этом как только получен #f остальные аргументы не вычисляются. Выражение (or #f 11 22 33) ;=> 11, т.к. после того, как получена истина следующие аргументы не вычисляются.

Нечто общее с FORTH есть, сам когда-то увлекался последним. Форт может в более широких пределах расширять синтаксис. Однако, ИМХО лисп более гибок и более высокоуровневый, не нужно постоянно заботится о стеке, проще реализуется переменное число аргументов и т.д…
У нас тут ошибка в cond statement, default case должен быть #t, а не else. Хотя может разные интерпретаторы по разному работают?

Так же забыли упомянуть, что функции вида (define (add a b) (+ a b) это named functions (именные?), а функции вида (lambda (x y) (+ x y)) это anonymous functions.

Я бы еще сюда добавил функции для создания, разрушение, присоединения листов: cons, car/cdr, append.

И очень полезную функцию eval
Спасибо за наблюдение. В cond может быть как else так и #t оба варианты корректны, в стандарте R6Rs, в примерах else. Хотя #t наверно более читаемо.

Так же забыли упомянуть, что функции вида (define (add a b) (+ a b) это named functions (именные?), а функции вида (lambda (x y) (+ x y)) это anonymous functions.

Я бы еще сюда добавил функции для создания, разрушение, присоединения листов: cons, car/cdr, append.

И очень полезную функцию eval


Согласен, как-то упустил из виду, обязательно позже дополню.
Sign up to leave a comment.