Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Написать программу на Лиспе, которая осуществляет ввод с клавиатуры
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anzhelika Anzhelika вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 18.06.2010
По умолчанию Написать программу на Лиспе, которая осуществляет ввод с клавиатуры - 25.06.2010, 10:21

Написать программу на Лиспе, которая осуществляет ввод с клавиатуры номера элемента и выводит значение для последовательности Xn=n/Xn-1, X1=2
Ответить с цитированием
  (#2 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 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)))]))
Ответить с цитированием
  (#3 (permalink)) Старый
anonymous anonymous вне форума
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)))))
Ответить с цитированием
  (#4 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 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:
Ответить с цитированием
  (#5 (permalink)) Старый
anonymous anonymous вне форума
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:
бессвязный бред
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 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:
Ответить с цитированием
  (#7 (permalink)) Старый
anonymous anonymous вне форума
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 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 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:
Ответить с цитированием
  (#9 (permalink)) Старый
anonymous anonymous вне форума
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:
их множество. какой из?
Ответить с цитированием
  (#10 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
По умолчанию 09.08.2010, 23:38

[b]
Цитата:
Originally posted by anonymous+-->
Цитата:
особенно если писать на нём так, как ты пишешь
Даже самая твоя немыслимая оптимизация не сравнится с фортране :wink:
Цитата:
Originally posted by anonymous@
[b]
Код:
| | | | | (x 1)
Вот теперь верю. Спасибо за 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 :?:
Ответить с цитированием
  (#11 (permalink)) Старый
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)
>
Ответить с цитированием
  (#12 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 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:
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Мухабойкин Мухабойкин вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 29.07.2010
По умолчанию 12.08.2010, 15:00

почему не отвечаешь? :drink:
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать программу которая строит графики bajge Delphi 5 18.06.2011 01:48
Ввод данных с клавиатуры как написать программу fitto С/С++ 6 24.02.2011 17:54
Рекурсивная функция, которая осуществляет проверку defun Lisp 14 30.01.2010 17:58
Написать программу, которая преобразует цикл FOR Bender266 Lisp 23 16.07.2009 15:23
Написать программу, которая преобразует циклы FOR Bender266 Lisp 1 09.05.2009 22:54
Написать программу на Lisp-e, которая осуществляет сложение двух многочленов vorm Lisp 2 17.10.2007 11:16
Как написать программу которая анализирует строку imported_JET_ C++ Builder 4 18.09.2006 17:00
Надо написать программу, которая позволяла пользователю ввести N чисел с клавиатуры Setter C++ Builder 12 11.05.2006 14:59
Как написать программу которая осуществляет светку одной функции с другой Poem Вопросы начинающих программистов 9 19.02.2005 13:03
Как написать программу на Basic которая введет с клавиатуры символьную переменную СРОЧНО! Вопросы начинающих программистов 5 25.11.2004 11:34
Как написать программу для проверки на ввод символов в C++(dos) E_L_D_I_C Вопросы начинающих программистов 6 31.10.2004 14:14
Написать программу которая закрывает любую программу из автозагрузки без перезагрузк Anonymous C++ Builder 1 07.10.2003 11:24



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов