Новичок
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.06.2010
|
Написать программу на Лиспе, которая осуществляет ввод с клавиатуры -
25.06.2010, 10:21
Написать программу на Лиспе, которая осуществляет ввод с клавиатуры номера элемента и выводит значение для последовательности Xn=n/Xn-1, X1=2
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

29.07.2010, 21:05
Цитата:
Написать программу на Лиспе, которая осуществляет ввод с клавиатуры номера элемента и выводит значение для последовательности Xn=n/Xn-1, X1=2
|
та да да думц бабах :drink: :drink: :drink: :drink: :drink:
Код:
#lang racket
(define x
(match-lambda
[1 2]
[n (/ n (x (- n 1)))]))
|
|
|
Member
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
|

02.08.2010, 21:13
Цитата:
та да да думц бабах :drink: :drink: :drink: :drink: :drink:
Код:
#lang racket
(define x
(match-lambda
[1 2]
[n (/ n (x (- n 1)))]))
|
1) а где ввод с клавиатуры?
2) нехвостовая рекурсия... переполнения стека не боитесь?
3) а если n окажется меньше единицы, когда функция завершится?
Код:
(require racket)
(define (f n)
(let loop ((x 2) (i 1))
(if (> i n)
x
(loop (/ (+ i 1) x) (+ i 1)))))
(define (main)
(display "Type a positive integer > ")
(let ((n (read)))
(if (and (integer? n) (positive? n))
(printf "X~a = ~a\n" n (f n))
(begin
(display "Wrong input!\n")
(main)))))
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

08.08.2010, 07:41
:drink: :drink: :drink: :drink: :drink:
анонимус, а анонимус, а ты почему анонимус, ты кагбе риальне капчу капчуешь по жизни?:baby:
1) это слишком сложно, да и зачем? :upset:
2) для численных задач уже есть фортран :look:
3) динамическая убогая типизация во всей красе: что аргумент-переменная > 0 в рантайме проверить еще можно, а то, что аргумент-функция из X в Y, а не из W в Z -- нельзя млин. Т.е. проверяй не проверяй, все равно работать будет наполовину. :wall:
|
|
|
Member
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
|

08.08.2010, 16:32
Цитата:
1) это слишком сложно, да и зачем? :upset:
|
да, вызвать read жутко сложно. а затем, что в задании есть требование.
Цитата:
2) для численных задач уже есть фортран :look:
|
это не значит, что нужно подавать дурной пример
Цитата:
3) динамическая убогая типизация во всей красе: что аргумент-переменная > 0 в рантайме проверить еще можно, а то, что аргумент-функция из X в Y, а не из W в Z -- нельзя млин. Т.е. проверяй не проверяй, все равно работать будет наполовину. :wall:
|
бессвязный бред
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

08.08.2010, 20:56
[b]
Цитата:
Originally posted by anonymous+-->
Цитата:
а затем, что в задании есть требование.
|
БУГОГО, а если тебе в задании потребуют повеситься, ты тоже сделаешь? :mrgreen:
Цитата:
Originally posted by anonymous@
[b]это не значит, что нужно подавать дурной пример
|
так вот и не подавай: :P
РАС :drink:
Код:
> (time (f 1000))
cpu time: 210 real time: 221 gc time: 170
> (time (x 1000))
cpu time: 210 real time: 221 gc time: 180
> (time (f 10000))
cpu time: 1181 real time: 1192 gc time: 310
> (time (x 10000))
cpu time: 1252 real time: 1572 gc time: 311
> (time (f 100000))
cpu time: 87085 real time: 91301 gc time: 6478
> (time (x 100000))
cpu time: 86714 real time: 90390 gc time: 7439
ДВАС :drink:
Дело не в рекурсии, а в рациональных числах: :clever:
Код:
> (define x
(match-lambda
[1 2.]
[n (/ n (x (- n 1)))]))
>
(time (x 100000))
cpu time: 190 real time: 231 gc time: 150
198.16686029683538
>
(time (x 1000000))
cpu time: 641 real time: 671 gc time: 160
626.6572253220461
ТРИС :drink:
С чего ты взял, что аргументы деления не в хвостовом контексте в racket? :shock:
<!--QuoteBegin-anonymous
бессвязный бред
|
нет, ты немного перепутал, бред - это твой любимый форум, не надо о нем везде говорить, а то сам знаешь... МУХАХА :baby:
Что тебе непонятно? Спрашивай! :mrgreen:
|
|
|
Member
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
|

08.08.2010, 21:56
Цитата:
так вот и не подавай: :P
РАС :drink:
Код:
> (time (f 1000))
cpu time: 210 real time: 221 gc time: 170
> (time (x 1000))
cpu time: 210 real time: 221 gc time: 180
> (time (f 10000))
cpu time: 1181 real time: 1192 gc time: 310
> (time (x 10000))
cpu time: 1252 real time: 1572 gc time: 311
> (time (f 100000))
cpu time: 87085 real time: 91301 gc time: 6478
> (time (x 100000))
cpu time: 86714 real time: 90390 gc time: 7439
|
и?
Цитата:
ДВАС :drink:
Дело не в рекурсии, а в рациональных числах: :clever:
Код:
> (define x
(match-lambda
[1 2.]
[n (/ n (x (- n 1)))]))
>
(time (x 100000))
cpu time: 190 real time: 231 gc time: 150
198.16686029683538
>
(time (x 1000000))
cpu time: 641 real time: 671 gc time: 160
626.6572253220461
|
при чём тут числа? память не бесконечная
Цитата:
ТРИС :drink:
С чего ты взял, что аргументы деления не в хвостовом контексте в racket? :shock:
|
а с чего ты взял, что в хвостовом?
Код:
(require scheme)
(define x
(match-lambda
(1 2)
(n (/ n (x (- n 1))))))
(define (f n)
(let loop ((x 2) (i 1))
(if (>= i n)
x
(loop (/ (+ i 1) x) (+ i 1)))))
(define x2
(match-lambda
(1 2.)
(n (/ n (x2 (- n 1))))))
(define (f2 n)
(let loop ((x 2.) (i 1))
(if (>= i n)
x
(loop (/ (+ i 1) x) (+ i 1)))))
(define (test n m)
(time (x n))
(time (f n))
(time (x2 m))
(time (f2 m))
(void))
=>
Код:
> (test 10000 1000000)
cpu time: 450 real time: 458 gc time: 90
cpu time: 440 real time: 445 gc time: 50
cpu time: 4040 real time: 4050 gc time: 1960
cpu time: 400 real time: 404 gc time: 0
> (test 10000 1000000)
cpu time: 1510 real time: 1509 gc time: 1130
cpu time: 420 real time: 420 gc time: 70
cpu time: 3470 real time: 3462 gc time: 1410
cpu time: 400 real time: 399 gc time: 0
> (test 10000 1000000)
cpu time: 560 real time: 559 gc time: 90
cpu time: 520 real time: 527 gc time: 50
cpu time: 4620 real time: 4613 gc time: 2390
cpu time: 400 real time: 400 gc time: 0
>
от ведь незадача, GC что-то долго работает на твоих функциях, никак продолжения подчищает?
но вот так ещё интересней:
Код:
> (time (x -1))
. . user break
user break
>
Цитата:
нет, ты немного перепутал, бред - это твой любимый форум
|
какой же мой любимый форум?
Цитата:
не надо о нем везде говорить, а то сам знаешь... МУХАХА :baby:
|
не знаю, расскажи, а заодно и покажи где и о каком форуме я везде говорю
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

09.08.2010, 00:18
[b]
Цитата:
Originally posted by anonymous+-->
Кагбе Лисп не предназначен для сложных численных расчетов и не стоит этим в нем заморачиваться, оптимизировать всякие смешные, не пр актичные, учебные примеры. 
Цитата:
Originally posted by anonymous@
[b]а с чего ты взял, что в хвостовом?
|
:shock: Торагой, это ты сказал, что у меня таки не хвостовая рекурсися, ты же и отвечай за свои слова.
<!--QuoteBegin-aninymous
[b]cpu time: 4620 real time: 4613 gc time: 2390
|
У /me намана все работает: :upset:
Код:
(test 10000 1000000)
cpu time: 1021 real time: 1031 gc time: 31
cpu time: 871 real time: 892 gc time: 20
cpu time: 561 real time: 561 gc time: 60
cpu time: 251 real time: 270 gc time: 90
> (test 10000 1000000)
cpu time: 1011 real time: 1021 gc time: 130
cpu time: 881 real time: 902 gc time: 90
cpu time: 631 real time: 631 gc time: 141
cpu time: 351 real time: 350 gc time: 191
> (test 10000 1000000)
cpu time: 1151 real time: 1182 gc time: 240
cpu time: 882 real time: 881 gc time: 60
cpu time: 681 real time: 681 gc time: 190
cpu time: 380 real time: 401 gc time: 210
> (test 10000 1000000)
cpu time: 962 real time: 1001 gc time: 60
cpu time: 871 real time: 872 gc time: 20
cpu time: 551 real time: 560 gc time: 60
cpu time: 250 real time: 251 gc time: 70
Цитата:
но вот так ещё интересней:
Код:
> (time (x -1))
. . user break
user break
>
|
ГЫ_гЫ, Если тебе что-то непонятно, то назови это "бессвязным бредом". Вот это отказ! Брависсимо! :mrgreen:
Цитата:
Originally posted by anonymous
какой же мой любимый форум?
|
Соответствующий твоему эпик-никнейму. :baby:
|
|
|
Member
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
|

09.08.2010, 19:36
Цитата:
Кагбе Лисп не предназначен для сложных численных расчетов и не стоит этим в нем заморачиваться, оптимизировать всякие смешные, не пр актичные, учебные примеры.
|
особенно если писать на нём так, как ты пишешь
Цитата:
:shock: Торагой, это ты сказал, что у меня таки не хвостовая рекурсися, ты же и отвечай за свои слова.
|
Код:
> (require mzlib/trace)
> (trace x f)
> (x 10)
|(x 10)
| (x 9)
| |(x 8)
| | (x 7)
| | |(x 6)
| | | (x 5)
| | | |(x 4)
| | | | (x 3)
| | | | |(x 2)
| | | | | (x 1)
| | | | | 2.0
| | | | |1.0
| | | | 3.0
| | | |1.3333333333333333
| | | 3.75
| | |1.6
| | 4.375
| |1.8285714285714285
| 4.921875
|2.0317460317460316
2.0317460317460316
> (f 10)
|(f 10)
|2.0317460317460316
2.0317460317460316
>
Цитата:
У /me намана все работает: :upset:
...
|
молодец какой, попробуй (time (x 100000000))
Код:
> (time (x 1000000))
cpu time: 4600 real time: 4607 gc time: 2390
626.6572253220461
> (time (f 1000000))
cpu time: 420 real time: 417 gc time: 0
626.6572253220461
> (time (x 10000000))
cpu time: 214340 real time: 214335 gc time: 160790
1981.6636983446338
> (time (f 10000000))
cpu time: 4240 real time: 4244 gc time: 80
1981.6636983446338
>
хороша тенденция. какая жалость, что time не показывает объём выделенной памяти под выполнение процедуры
Цитата:
ГЫ_гЫ, Если тебе что-то непонятно, то назови это "бессвязным бредом". Вот это отказ! Брависсимо! :mrgreen:
|
мне непонятно зачем ты демонстрируешь заведомо бажный код. так что там с (x -1) ?
Цитата:
Соответствующий твоему эпик-никнейму. :baby:
|
их множество. какой из?
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

09.08.2010, 23:38
[b]
Цитата:
Originally posted by anonymous+-->
Цитата:
особенно если писать на нём так, как ты пишешь
|
Даже самая твоя немыслимая оптимизация не сравнится с фортране :wink:
Цитата:
Originally posted by anonymous@
[b]
|
Вот теперь верю. Спасибо за trace, не знал. Чмок тебя в носик :-*
<!--QuoteBegin-anonymous
[b]мне непонятно зачем ты демонстрируешь заведомо бажный код.
|
Вот тебе функция foo :drink:
Код:
#lang racket
;foo : ((listof integer?) -> integer?) (listof integer?) -> integer?
(define (foo f x)
(if (and (procedure? f);и все. а то, что она должна быть
;((listof integer?) -> integer?) как ты проверишь?
((listof integer?) x))
(f x)
(error 'foo "ошибке типа")))
;f : pair? -> string?
(define (f x)
(if (pair? x)
"hello world"
(error 'f "ошибке типа")))
Код:
> (foo f '(1 2 3))
"hello world"
;ОГО, а где ошибке??? o_O
cделай ее не бажной, умнег 8-)
Цитата:
Originally posted by anonymous
их множество. какой из?
|
Так почему ты anonymous :?:
|
|
|
Member
Сообщений: 130
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.03.2010
|

10.08.2010, 09:00
Цитата:
Вот тебе функция foo :drink:
Код:
#lang racket
;foo : ((listof integer?) -> integer?) (listof integer?) -> integer?
(define (foo f x)
(if (and (procedure? f);и все. а то, что она должна быть
;((listof integer?) -> integer?) как ты проверишь?
((listof integer?) x))
(f x)
(error 'foo "ошибке типа")))
;f : pair? -> string?
(define (f x)
(if (pair? x)
"hello world"
(error 'f "ошибке типа")))
Код:
> (foo f '(1 2 3))
"hello world"
;ОГО, а где ошибке??? o_O
cделай ее не бажной, умнег 8-)
|
она и так не бажная, вполне нормальное поведение для языка с динамической типизацией, а уход в бесконечную рекурсию -- явный и глупый баг, от которого тебя и статическая типизация не факт, что спасёт
Код:
x :: (Fractional t) => t -> t
x 1 = 2.0
x n = n / (x $ n - 1)
но ты-то видимо помимо trace про контракты тоже не знал
Код:
(module m scheme
(provide/contract
(foo (((listof integer?) . -> . integer?) (listof integer?) . -> . integer?))
(legal-f ((listof integer?) . -> . integer?))
(illegal-f ((listof string? ) . -> . integer?)))
(define (foo f x)
(f x))
(define (legal-f x)
(printf "hello legal world\n")
0)
(define (illegal-f x)
(printf "hello illegal world\n")
0)
)
=>
Код:
> (require 'm)
> (foo legal-f '(1 2 3))
hello legal world
0
> (foo illegal-f '(1 2 3))
. top-level broke the contract
(-> (listof string?) integer?)
on illegal-f; expected <(listof string?)>, given: (1 2 3)
>
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

11.08.2010, 00:38
[b]
Цитата:
Originally posted by anonymous
[b]она и так не бажная, вполне нормальное поведение для языка с динамической типизацией
|
Ну вот и моя изначальная функция x "не бажная, вполне нормальное поведение для языка с динамической типизацией" :-D
Цитата:
Originally posted by anonymous+-->
Цитата:
уход в бесконечную рекурсию ── явный и глупый баг, от которого тебя и статическая типизация не факт, что спасёт
|
O RLY :?:
Код:
#lang typed/racket
(: pred (Natural -> Natural))
(define (pred n)
(abs ;это такое хитрое приведение типа,
;т.к. в typed racket его нет, а жаль
(- n 1)))
(: x (Natural -> Real))
(define x
(match-lambda
[0 2.]
[n (/ n (x (pred n)))]))
(: f (Exact-Positive-Integer -> Real))
(define (f n) (x (pred n)))
Код:
> (f 1)
- : Real
2.0
> (f -1)
. Type Checker: Expected Exact-Positive-Integer, but got Integer in: -1
<!--QuoteBegin-anonymous
но ты-то видимо помимо trace про контракты тоже не знал
|
Нет, знал, я выяснял в курсе ли ты сам, это была разминка 
А теперь вот тебе функция bar, сделай ее не бажной :drink:
Код:
#lang racket/load
(module m racket
(provide/contract
;[bar (('a . -> . 'b) (listof 'a) . -> . (listof 'b))]
;WAIT... а так же нельзя
;придется писать с багами, айайай
[bar (let ([a any/c]
[b any/c])
((a . -> . b) (listof a) . -> . (listof b)))]
[f (exact-positive-integer? . -> . exact-positive-integer?)]
[l (listof integer?)])
;bar - аналог map для одного списька
(define (bar f lst)
(define (helper r l);так и быть, сделаем хвотс ресисию
(if (null? l) r (helper (cons (f (car l)) r) (cdr l))))
;хотя, можно было и свертку замутить, но не суть
(helper '() (reverse lst)))
(define (f x) (+ x 1))
(define l '(1 2 3)))
(require 'm)
Код:
> (bar f l)
'(2 3 4)
Ни единого разрыва контрактэ! БАГ!!! :wall:
Код:
#lang typed/racket
(: f (Exact-Positive-Integer -> Exact-Positive-Integer))
(define (f x) (+ x 1))
(: l (Listof Integer))
(define l '(1 2 3))
(: bar (All (a b) ((a -> b) (Listof a) -> (Listof b))))
(define (bar f lst)
(: helper (All (a b) ((Listof b) (Listof a) -> (Listof b))))
(define (helper r l)
(if (null? l) r (helper (cons (f (car l)) r) (cdr l))))
(helper '() (reverse lst)))
Код:
> (bar f l)
. Type Checker: Polymorphic function bar could not be applied to arguments:
Argument 1:
Expected: (a -> b)
Given: (Exact-Positive-Integer -> Exact-Positive-Integer)
Argument 2:
Expected: (Listof a)
Given: (Listof Integer)
in: (bar f l)
БАГ!!! БАГ!!! БАГ!!! :evil:
|
|
|
Новичок
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
|

12.08.2010, 15:00
почему не отвечаешь? :drink:
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
|