- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
chislo :: String -> Bool
chislo []=True
chislo (x:xs) =if (x=='1') then chislo xs
else if (x=='2') then chislo xs
else if (x=='3') then chislo xs
else if (x=='4') then chislo xs
else if (x=='5') then chislo xs
else if (x=='6') then chislo xs
else if (x=='7') then chislo xs
else if (x=='8') then chislo xs
else if (x=='9') then chislo xs
else if (x=='0') then chislo xs
else if (x=='.') then chislo xs
else False
это же haskell, тут все легко и понятно
(every (lambda (x) (or (digit-char-p x) (char= x #\.))) in-string)
Вобщем, не зная изначальную задачу тяжело сказать, что именно не получилось у автора кода.
упс D:
(defun maybe-float-p (from-string)
(let ((x (ignore-errors (read-from-string from-string)))) (and (realp x) (not (integerp x)))))
Кроме того, мой вариант может оказаться оптимальнее (не смотря на то, что "не красивый") в случае когда, например: 1/1234567890123456789012345678901234567890 потому что закончит работу когда ему встретится / а не будет читать до самого конца, не смотря на то, что уже как бы и так все понятно.
Справедливо. Это мой глюк. В таком случае можно и let убрать:
(defun maybe-float-p (from-string)
(realp (ignore-errors (read-from-string from-string))))
Ну а насчет остального скажу так: Ваш код выглядит (чисто визуально) жутковато - я даже побоялся в нем разбираться. CL позволяет сделать все проще.
А по поводу цикла - дело привычки, наверное. Я думаю, что iterate красивше выглядит, но если ищу примеры, то чаще всего именно loop попадается.
Можно было бы его импортировать в текущий пакет, и не нужно было бы писать имя пакета все время, но для наглядности оставил.
См. также Datalog
скажи,
>chislo
bydlo cannot into haskell