Задачи из этого списка даются в качестве индивидуальных заданий.
> (reachable '((1 2) (1 3) (4 1) (3 5)) 1)
(1 2 3 5)
> (diff 'x)
1
> (diff '(+ x (f x)))
(+ 1 (diff (f x)))
x
(например, (+ (sin x) (* 2 (sin x)) (* x x))
).
Привести подобные члены.
> (evaluate '(1 * (2 + 3) - 4))
1
> (ticket '(1 2 5 7 2 1) 100)
(* (* (* 1 2) 5) (+ 7 (+ 2 1)))
eq
для двух равных целых чисел
начинает возвращать NIL
:> (eq 1 1)
T
> (eq (expt 10 20) (expt 10 20))
NIL
> (places '(vasya 1 50) '(petya 2 45) '(kolya 2 45) '(dima 2 30))
((dima 1) (kolya 2) (petya 2) (vasya 4))
socket-connect
,
socket-server
. Передавать задания для вычисления и результаты в виде выражений LISP,
читать при помощи read
. Пример клиента, отправляющего серверу S-выражение:
(let ((f (socket-connect PORT HOST))) (princ EXPR f) )Пример сервера, ожидающего подключение и читающего выражение от подключённого клиента:
(let ( (serv (socket-server PORT)) ) (let ( (f (socket-accept serv)) ) (read f) ) )На вход программе даётся список серверов для подключения (заранее запущенных) и S-выражение, которое рассматривается как вызов функции с N аргументами. На выходе — результат вычислений. Для проверки можно определить функцию
(defun slow (x) (sleep 5) x)
и попробовать замерить время вычисления
выражения (+ (slow 1) (slow 2) (slow 3))
в последовательном и параллельном вариантах. Время вычисления выражения expr
замеряется при помощи (time expr)
. (parallel '(("127.0.0.1" 12345) ("127.0.0.1" 12346)) '(+ (slow 1) (slow 2) (slow 3)))
*
и ?
(см. задачи по курсу ОС, задача 19).
1 2 3 4 5 6
3 5 1 2 4 6
Представить данную подстановку в виде произведения независимых циклов. Для данного примера:
(1 3)(2 5 4)(6)