Форум программистов, компьютерный форум, киберфорум
Наши страницы
Clojure
Войти
Регистрация
Восстановить пароль
 
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
1

Присвоение ввода с клавиатуры переменной в Clojure

13.06.2018, 18:31. Просмотров 441. Ответов 15
Метки нет (Все метки)

Мне нужен код делающий следующее :
1. Присвоить ввод с клавы переменной.
2. "Сложить" её со строкой "Привет, ".
3. Результат вывести на экран.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2018, 18:31
Ответы с готовыми решениями:

Clojure
Посоветуйте русскоязычные ресурсы для изучения сего языка

Clojure map
Есть ли map, который бы применял переданную функцию ко всем значениям из...

Clojure - помогите начать
0. Написал название языка в заголовке темы по-нормальному, на английском (или...

Написать программу на Clojure
Написать функцию, которая разбивает предложение в отсортированный список слов ...

Ввод данных пользователем в Clojure
Как получать данные от пользователя? На такой код ругается: (defn sum ...

15
xoraxax
1330 / 1275 / 375
Регистрация: 05.07.2013
Сообщений: 6,115
Завершенные тесты: 1
13.06.2018, 18:55 2
тебе нужно вежливости поучиться, а вообще стыдно такие вопросы задавать

Java
1
2
3
(defn hello-world []
  (let [name (read-line)]
    (println (format "Hello, %s" name))))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
14.06.2018, 23:40  [ТС] 3
Итак, на CLISP следующее катит -

Break 1 [2]> (dolist (i `(1 2 3)) (print i))
1
2
3
NIL


а на Clojure следующее не катит -

user=> (dolist (i `(1 2 3)) (println i))
java.lang.Exception: Unable to resolve symbol: dolist in this context (NO_SOURCE_FILE:18)


Насколько я понимаю, dolist в Clojure нет ...
Поэтому просьба - напишите, как произвести итерацию по списку ...
0
trifecta
7 / 6 / 6
Регистрация: 18.09.2017
Сообщений: 49
15.06.2018, 08:05 4
Lisp
1
(doseq [x '(1 2 3)] (println x))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
15.06.2018, 22:11  [ТС] 5
Следующий вопрос - (? `(1 2 3) 4) => `(1 2 3 4) - что должно быть написано вместо ? ...
P.S. Я конечно понимаю, что задаю простейшие вопросы, но "Программирование на Clojure"
это болото мне легче так ...

Добавлено через 1 час 30 минут
(conj `(1 2 3) 4) => (4 1 2 3) - теперь сам собой возникает вопрос,
а (1 2 3 4) как получить ...

Добавлено через 6 минут
user=> (reverse (conj (reverse `(1 2 3)) 4))
(1 2 3 4)

Так что ли ...
0
xoraxax
1330 / 1275 / 375
Регистрация: 05.07.2013
Сообщений: 6,115
Завершенные тесты: 1
15.06.2018, 22:26 6
например
(concat `(1 2 3) (list 4))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
16.06.2018, 15:30  [ТС] 7
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defn spisok []
  (def order `(0)) (def q 0)
  (println " Vvedite N = ")
    (let [n (read-string (read-line))]
      (while (<= q n) 
        (def j 0) (def t (Math/round (rand n)))
          (doseq [i order] (if (not (= t i)) (inc j)))
    (if (= j (count order)) (def order (concat order (list t))))
      (def q (count order)))
        (def order (rest order))
          (print " S = ") (doseq [i order] (print " " i))))
Вот к чему всё шло, но код неправильный - такое впечатление
что прога впадает в бесконечный цикл ...
Просьба

Добавлено через 40 минут
Прога принимает число и строит список с таким же
числом элементов, без 0, без повторов, без лакун,
Элементы располагаются в случайном порядке ...

Добавлено через 4 часа 9 минут
Следует добавить что элементы, это
числа от 1 до N включительно ...

Добавлено через 3 часа 13 минут
Как должна работать прога:
стр. №2 - создание списка order с 1 элементом равным 0, обнуление длины списка q.
№4 - ввод строки, превращение её в число, присвоение его n.
№5 - цикл работает пока q <= n.
№6 - обнуление счётчика j, присвоение t случайного целого числа.
№7 - обход order, если числа t нет в списке - увеличение j.
№8 - если j = длине списка, т.е. совпадений не было найдено, то к списку прибавляется t.
№9 - q = длина списка, и идет сравнение с n.
№10 - удаление первого элемента.
№11 - так я пытаюсь вывести список ...

Добавлено через 1 час 27 минут
№7 - j увеличивается на 1 при каждом несовпадении t с i.
0
korvin_
2161 / 1650 / 320
Регистрация: 28.04.2012
Сообщений: 5,907
16.06.2018, 17:18 8
Slenon, почитай про lexical scope, что ли.

Добавлено через 2 минуты
Ну и да, естественно она впадёт в бесконечный цикл, ведь (<= q n) всегда true
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
16.06.2018, 18:24  [ТС] 9
Цитата Сообщение от korvin_ Посмотреть сообщение
ведь (<= q n) всегда true
korvin, т.е. q всё время <= n - оно никак не может стать
больше чем n ...
И в этом виновато то, что я не правильно "использую"
пространство имён? ...
0
korvin_
2161 / 1650 / 320
Регистрация: 28.04.2012
Сообщений: 5,907
16.06.2018, 23:12 10
Цитата Сообщение от Slenon Посмотреть сообщение
т.е. q всё время <= n - оно никак не может стать
больше чем n
Именно это я и сказал, зачем повторяешь?

Цитата Сообщение от Slenon Посмотреть сообщение
И в этом виновато то, что я не правильно "использую"
пространство имён?
Нет, в этом виновато, что ты не используешь голову, а пишешь код рандомно.
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
18.06.2018, 20:03  [ТС] 11
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defn spisok []  
     (def q 0) (def order `(0))
    (println " Vvedite N = ")
    (let [n (read-string (read-line))]       
      (while (<= q n)
       (def j 0) (def t (Math/round (rand n)))
         (doseq [i order] (if (not (= t i)) (def j (+ 1 j))))
      (if (= j (count order)) (def order (concat order (list t))))
        (def q (count order)))
          (def order (rest order))
    (print " S = (") (doseq [k order] (print " " k)) (print " )\n")))
*ns* -

Добавлено через 2 часа 38 минут
Lisp
1
(def order (rest order)) (println " S = " order)))
Добавлено через 11 часов 49 минут
Очередной ?
( ___ "Q" "W") => "QW" - что должно быть вместо ___ ? ...

Добавлено через 1 час 36 минут
(str "Q" "W")
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
27.06.2018, 20:15  [ТС] 12
Вопросы, вопросы, вопросы ...
Lisp
1
2
3
4
5
6
7
8
9
10
(defn spisok [] 
  (while (< 1 2) 
  (def order `(0))
  (println " Vvedite N = ")
    (let [n (read-string (read-line))]       
      (while (<= (count order) n)
       (def j `()) (def t (Math/round (rand n)))
         (doseq [i order] (if (not (= t i)) (def j (conj j 1))))
      (if (= (count j) (count order)) (def order (concat order (list t)))))
          (println " S = " (rest order)))))
Здесь убрано "накопление суммы" ...
Вопрос такой, является ли такой вариант кода более соответствующим
"духу" Clojure чем предыдущий ...

Добавлено через 5 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defn arab_rim []
(def arab [1000 900 500 400 100 90 50 40 10 9 5 4 1 ])
(def rim  ["M" "CM" "D" "CD" "C" "XC" "L" "XL" "X" "IX" "V" "IV" "I"])
(while (< 1 2) 
(def e -1) (def Rim "")
    (println " Vvedite Arab = ")
  (let [Arab (read-string (read-line))]
       (def Arab1 Arab)  
      (while (< 0 Arab1)
        (def e (inc e))     
        (while (<= (nth arab e) Arab1)              
          (def Rim  (str Rim (nth rim e)))                 
          (def Arab1 (- Arab1 (nth arab e)))))
          (println " Rim  = " Rim))))
Вопрос, является ли (def Arab1 Arab) правильным путём решения
проблемы let, или существует более "формальный" способ ...

Добавлено через 18 минут
Lisp
1
2
3
4
5
6
7
8
9
10
(defn rim_arab []
  (def rimarab {:I 1 :V 5 :X 10 :L 50 :C 100 :D 500 :M 1000})
  (while (< 1 2) 
  (println " Введите Rim = ")
    (let [rim (read-line)]
      (def f1 (replace rim "IV" "IIII")) (def f2 (replace f1 "IX" "VIIII"))
      (def f3 (replace f2 "XL" "XXXX"))  (def f4 (replace f3 "XC" "LXXXX"))
      (def f5 (replace f4 "CD" "CCCC"))  (def f6 (replace f5 "CM" "DCCCC"))
        (def Arab 0) (doseq [i f6] (def Arab (+ Arab (get rimarab i))))
          (println " Arab = " Arab))))
А вот с этим кодом проблемы ...
Просьба ответить на следующие вопросы:
1. Как правильно заменить подстроку в строке (replace)
2. В строке (doseq [i f6] (def Arab (+ Arab (get rimarab i)))) i принимает
string значения ("V" например), а надо :V ...
Как решить эту проблему?

Добавлено через 20 часов 34 минуты
Вот результаты эксперемента:

C:\WINDOWS\system32>cd C:\Program Files\clojure-1.8.0\clojure-1.8.0\
C:\Program Files\clojure-1.8.0\clojure-1.8.0>java -cp clojure.jar clojure.main
Clojure 1.2.0
user=> *ns*
#<Namespace user>
user=> (def rimarab {"I" 1 "V" 5 "X" 10 "L" 50 "C" 100 "D" 500 "M" 1000})
#'user/rimarab
user=> (def Arab 0)
#'user/Arab
user=> (doseq [i "III"] (def Arab (+ Arab (get rimarab i))))
java.lang.NullPointerException (NO_SOURCE_FILE:0)
user=> (doseq [i "III"] (def Arab (+ Arab (get rimarab "I"))))
nil
user=> Arab
3
user=> (doseq [i "III"] (println i))
I
I
I
nil
user=>


Вопрос, если (doseq [i "III"] ...) выдаёт не "I" (3 раза),
то что получается на выходе (I - это что? ...) ...

Добавлено через 1 час 39 минут
Я так понимаю что на выходе была последовательность ...
Lisp
1
(def rimarab {"I" 1 "V" 5 "X" 10 "L" 50 "C" 100 "D" 500 "M" 1000})
Lisp
1
(doseq [i (map str rim)] (def Arab (+ Arab (get rimarab i))))
С replace по прежнему глухо

Добавлено через 6 часов 15 минут
Lisp
1
2
3
4
5
6
7
8
9
10
(defn rim_arab []
  (def rimarab {"I" 1 "V" 5 "X" 10 "L" 50 "C" 100 "D" 500 "M" 1000})
  (while (< 1 2) 
  (println " Введите Rim = ")
    (let [rim (read-line)]
      (def f (.replace rim "IV" "IIII")) (def f (.replace f "IX" "VIIII"))
      (def f (.replace f "XL" "XXXX"))   (def f (.replace f "XC" "LXXXX"))
      (def f (.replace f "CD" "CCCC"))   (def f (.replace f "CM" "DCCCC"))
        (def Arab 0) (doseq [i (map str f)] (def Arab (+ Arab (get rimarab i))))
          (println " Arab = " Arab))))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
11.07.2018, 04:15  [ТС] 13
Lisp
1
2
3
4
5
6
7
8
(defn rim_arab []
(def w {"IV" "IIII" "IX" "VIIII" "XL" "XXXX" "XC" "LXXXX" "CD" "CCCC" "CM" "DCCCC"})
(def q (keys w)) (def r_a {"I" 1 "V" 5 "X" 10 "L" 50 "C" 100 "D" 500 "M" 1000}) 
 (while (< 1 2) (println " Введите Rim = ")
  (let [rim (read-line)] (def f rim)
   (doseq [j q] (def f (.replace f j (get w j))))
    (def Arab 0) (doseq [i (map str f)] (def Arab (+ Arab (get r_a i))))
     (println " Arab = " Arab))))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
13.07.2018, 00:40  [ТС] 14
Lisp
1
2
3
4
5
6
7
8
9
10
(defn rim_arab []
(def r_a {"I" 1 "V" 5 "X" 10 "L" 50 "C" 100 "D" 500 "M" 1000})
(def q ["IV" "IX" "XL" "XC" "CD" "CM"])
(def w ["IIII" "VIIII" "XXXX" "LXXXX" "CCCC" "DCCCC"]) 
(def e [0 1 2 3 4 5])
 (while (< 1 2) (println " Введите Rim = ")
  (let [rim (read-line)] (def f rim)
   (doseq [j e] (def f (.replace f (nth q j) (nth w j))))
    (def Arab 0) (doseq [i (map str f)] (def Arab (+ Arab (get r_a i))))
     (println " Arab = " Arab))))
Добавлено через 2 часа 50 минут
Lisp
1
(doseq [j (range 6)] (def f (.replace f (nth q j) (nth w j))))
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
09.08.2018, 00:25  [ТС] 15
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;arab_rim_2.clj
(defn arab_rim_2 []
 (def arab [1000 900 500 400 100 90 50 40 10 9 5 4 1 ])
 (def rim  ["M" "CM" "D" "CD" "C" "XC" "L" "XL" "X" "IX" "V" "IV" "I"])
 (def kol_vo [3 1 1 1 3 1 1 1 3 1 1 1 3])
  (while (< 1 2) (def K -1) (def Rim "")
   (println " Vvedite Arab = ")
    (let [Arab (read-string (read-line))] (def Arab_1 Arab)  
     (doseq [i kol_vo] (def K (inc K))
      (repeat i (if (<= 0 (- Arab_1 (nth arab K)))
                  (def Rim  (str Rim (nth rim K)))                               
                  (def Arab_1 (- Arab_1 (nth arab K)))
                  )))      
       (print " Arab  = " Arab) (print " ==> ") (println " Rim  = " Rim))))
Просьба - как изменить код, чтобы при значении true (if), вычислялись
строки 11 и 12 ...
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 150
12.08.2018, 20:57  [ТС] 16
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
;arab_rim_2.clj
(defn Q   [] (- Arab_1 (nth arab K))) (defn IF  [] (<= 0 (Q)))
(defn A_R [] (def Rim (str Rim (nth rim K))) (def Arab_1 (Q)))
(defn INC [] (def K (inc K)))
(defn arab_rim_2 []
 (def arab    [1000 900 500 400 100 90 50 40 10 9 5 4 1 ])
 (def rim     ["M" "CM" "D" "CD" "C" "XC" "L" "XL" "X" "IX" "V" "IV" "I"])
 (def kol_vo  [3 1 1 1 3 1 1 1 3 1 1 1 3])
  (while (< 1 2) (def K 0) (def Rim "") (println " Vvedite Arab = ")
   (let [Arab (read-string (read-line))] (def Arab_1 Arab)  
    (doseq [i kol_vo] (loop [x i] (if (IF) (recur (A_R)))) (INC))         
     (print " Arab  = " Arab) (print " ==> ") (println " Rim  = " Rim))))
0
12.08.2018, 20:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2018, 20:57

Clojure, lein-droid, Android ламерство
Пытаюсь разбираться с программированием под Андройд на Lisp'е. Сразу скажу --...

Clojure. Последовательность создается задом-наперед
Делаю из SICP задание &quot;треугольник Пифагора&quot;. Вот процедура, которая...

Ошибка при запуске локального сервера на Clojure в IntellijIDEA
Выводится ошибка по строке, которой даже нет. По отдельности все функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru