Серьёзной ошибкой проектирования языка Haskell было то,
что они назвали ЭТО страшным словом "монада".
Надо было назвать ЭТО "клёвой пушистой штуковиной"
После просмотра
комикса о числовых позах для секса, задумались мы о том, какие же числа(двузначные, ибо мы несколько традиционны) лучше всего подходят для визуализации. Нам не удалось придумать положений, не требующих специальной акробатической подготовки, только для цифр 3 и 5. Итого 8 * 8 = 64 позы.
Реализация, предложенная
jtootf, на Хаскеле практически соответствует математической записи и содержит в себе вычитание и декартово умножение множеств.
let li = [0..9] \\ [3, 5] in filter ((> 1) . length) [(show x) ++ (show y) | x <- li, y <- li]
В стандартных библиотеках Scheme нет декартова произведения множеств, потому мне пришлось реализовать его самостоятельно.
(define position-lst '("1" "2" "4" "6" "7" "8" "9" "0" ))
(define (make-positions )
(define (loc-make-pos lst)
(cond
[(null? lst) null]
[(cons (map
(lambda (pose)
(string-append (car lst) pose)) position-lst)
(loc-make-pos (cdr lst)))]
))(loc-make-pos position-lst))
Принимаются предложения по добавлению символов, которые легко изобразить, и в тоже время комбинации с которыми будут иметь математический смысл.
UPD: от
ungzd на Питоне.
from itertools import product
print ["".join(x) for x in (product(*["12467890" for i in [0,1]]))]
UPD2: C пинка
vad_a переписала
(define position-lst '("1" "2" "4" "6" "7" "8" "9" "0" ))
на
(define position-lst (map number->string (remq* '(3 5) (build-list 10 values))))
UPD3: Чуть изменённая аналитиками ЛОРа версия на хаскеле на 63 символа
let li = ['0'..'9'] \\ ['3', '5'] in [[x, y] | x <- li, y <- li]
UPD4: от
forever-old. Баш всех порвал.
echo {1,2,4,6,7,8,9,0}{1,2,4,6,7,8,9,0}