%USERNAME% ты тыкал/делал что-нибудь на этом языке?
Какой experience?
Для Ъ:
Фичи языка:
pattern-matching:
(define member
_ [] -> false
X [X | _] -> true
X [_ | Y] -> (member X Y))
каррирование/partial application:
> (* 2)
#<FUNCTION :LAMBDA (#:Y19250) (multiply #:Y19249 #:Y19250)>
> ( (* 2) 2)
4
статическая типизация:
(define total
{(list number) --> number}
[] -> 0
[X | Y] -> (+ X (total Y)))
(define total-tst
-> (total [1 2 3 4 'a]))
\* выключим static type checking *\
> (tc -)
false : boolean
> (total-tst)
COERCE: 'a is not a real number
\* включим static type checking *\
> (tc +)
true
> (total-tst)
type error
Встроенная машина вывода (prolog):
(48-) (defprolog member
X [X | _] <--;
X [_ | Y] <-- (member X Y);)
member
(51-) (prolog? (member 1 [1 2]))
true
(52-) (prolog? (member 0 [1 2]))
false
(53-) (prolog? (member X [1 2]))
true
(54-) (prolog? (member X [1 2]) (return X))
1
Задание пользовательских типов данных (в т/ч рекурсивных) при помощи sequent calculus
(15+) (datatype binary
if (element? X [0 1])
_____________
X : zero-or-one;
X : zero-or-one;
__________________
[X] : binary;
X : zero-or-one; Y : binary;
____________________________
[X | Y] : binary;
X : zero-or-one, [Y | Z] : binary >> P;
___________________________________________
[X Y | Z] : binary >> P;)
binary
(16+) (define complement
\calculates the complement of a binary number\
{binary --> binary}
[0] -> [1]
[1] -> [0]
[1 N | X] -> [0 | (complement [N | X])]
[0 N | X] -> [1 | (complement [N | X])])
complement : (binary --> binary)
(3+) (complement [0 1 0 1])
[1 0 1 0] : binary