GNU Guile
Реализация языка программирования Lisp
Логотип GNU Guile
Ссылки:
Примеры:
Hello, World!:
Пример для версий JScheme 7.2, MIT/GNU Scheme 7.7.9, guile 1.8.5Вывод строки на печать — побочный эффект выполнения этой команды. В зависимости от выбранной реализации, команда вернет либо выведенный текст, либо Unspecified return value
.
(write "Hello, World!")
Факториал:
Пример для версий JScheme 7.2, MIT/GNU Scheme 7.7.9, guile 1.8.5Используется рекурсивное определение факториала. Отметим, что GNU Guile и MIT/GNU Scheme выводит правильный результат, а в JScheme возникает переполнение, и факториалы с 13! вычисляются неправильно.
(define (factorial x)
(if (< x 2)
1
(* x (factorial (- x 1)))))
(do ((i 0 (+ i 1)))
((> i 16))
(display (string-append (number->string i) "! = "))
(display (number->string (factorial i)))
(newline))
Числа Фибоначчи:
Пример для версий JScheme 7.2, MIT/GNU Scheme 7.7.9, guile 1.8.5Используется рекурсивное определение чисел Фибоначчи.
(define (fibonacci x)
(if (< x 2)
x
(+ (fibonacci (- x 1)) (fibonacci (- x 2)))))
(do ((i 1 (+ i 1)))
((> i 16))
(display (string-append (number->string (fibonacci i)) ", ")))
(display "...")
(newline)
Квадратное уравнение:
Пример для версий guile 1.8.5Конструкция begin
используется для того, чтобы выполнить несколько команд подряд.
(define A (read))
(define B (read))
(define C (read))
(define D (- (* B B) (* 4 A C)))
(if (= A 0)
(display "Not a quadratic equation.")
(begin
(define k1 (/ B -2 A))
(define k2 (/ (sqrt (abs D)) 2 A))
(if (= D 0)
(begin (display "x = ") (display k1))
(if (> D 0)
(begin (display "x1 = ") (display (+ k1 k2)) (newline) (display "x2 = ") (display (- k1 k2)))
(begin (display "x1 = (") (display k1) (display ", ") (display k2) (display ")") (newline)
(display "x2 = (") (display k1) (display ", ") (display (- k2)) (display ")"))))))
CamelCase:
Пример для версий guile 1.8.5В этом примере показана работа с регулярными выражениями из модуля regex
. Первые две строки подключают нужные модули. Третья — читает строку из входных данных командой read-line
(модуль rdelim
) — в отличие от read
, она читает все символы до конца строки, а не до первого пробела — и переводит ее в нижний регистр.
Четвертая команда находит все последовательности букв нижнего регистра в строке. Для каждой такой последовательности она заменяет ее на результат применения к ней некоторой функции (привязанной с помощью lambda
). В данном случае это функция string-titlecase
, переводящая первый символ строки в верхний регистр.
Наконец, пятая команда удаляет из строки все символы, не являющиеся буквами.
(use-modules (ice-9 regex))
(use-modules (ice-9 rdelim))
(define text (string-downcase (read-line)))
(define text (regexp-substitute/global #f "[a-z]+" text 'pre (lambda (m) (string-titlecase (match:substring m))) 'post))
(define text (regexp-substitute/global #f "[^a-zA-Z]+" text 'pre 'post))
(display text)
Комментарии
]]>blog comments powered by Disqus
]]>