Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Smalltalk и математика как объединить
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Dimitrii Dimitrii вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.02.2004
По умолчанию Smalltalk и математика как объединить - 16.10.2004, 15:11

Всем доброго времени суток.
В Smalltalk я новичек, чего не скажеш о других языках.
И вот заинтересовал меня этот язык(до этого был опыт школьный Basic, потом собственный интерес Java, потом университет C/C++ и Object Pascal).
После всех этих языков никак не могу врубится))
Просто это другой тип мышления чтоли...
Вот пытаюсь решить простенькую задачку, решить уравнение методом итерации:
Код:
"Smalltalk - Squeak, хотя тут не имеет значения"
"Это просто набросок, абстрактный"
   |x eps y|
   x:=1 "предположим приближенное значение корня"
   eps:= 0.00001 "точность"
   y:= x sin + x*x "вообщем не имеет значения, любая функция"
 [y-x abs >= eps]
        whileTrue:
              [x:=y; y = x sin +x*x]
   y.
Так чтоли? Мне кажется, что у меня тут куча ошибок(и Squeak подтверждает это)),
Очень трудно после процедурных языков(и таких псевдообъектно-ориентированных как Java) перейти на Smalltalk.
Ответить с цитированием
  (#2 (permalink)) Старый
Dimitrii Dimitrii вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.02.2004
По умолчанию Smalltalk и математика как объединить - 16.10.2004, 15:11

Всем доброго времени суток.
В Smalltalk я новичек, чего не скажеш о других языках.
И вот заинтересовал меня этот язык(до этого был опыт школьный Basic, потом собственный интерес Java, потом университет C/C++ и Object Pascal).
После всех этих языков никак не могу врубится))
Просто это другой тип мышления чтоли...
Вот пытаюсь решить простенькую задачку, решить уравнение методом итерации:
Код:
"Smalltalk - Squeak, хотя тут не имеет значения"
"Это просто набросок, абстрактный"
   |x eps y|
   x:=1 "предположим приближенное значение корня"
   eps:= 0.00001 "точность"
   y:= x sin + x*x "вообщем не имеет значения, любая функция"
 [y-x abs >= eps]
        whileTrue:
              [x:=y; y = x sin +x*x]
   y.
Так чтоли? Мне кажется, что у меня тут куча ошибок(и Squeak подтверждает это)),
Очень трудно после процедурных языков(и таких псевдообъектно-ориентированных как Java) перейти на Smalltalk.
Ответить с цитированием
  (#3 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 16.10.2004, 16:10

welcome %)
в задачке стиль вполне процедурный, и решение у вас правильное, за исключением синтаксических ошибок. Быстрое введение в синтаксис - тут: http://minnow.cc.gatech.edu/squeak/1859 (прежде всего SqueakLanguageRef), более подробная и очень хорошая книга о программировании Smalltalk тут: http://www.iam.unibe.ch/~ducasse/FreeBooks/ByExample/
Кроме того smalltalk.ru

Синтаксис Smalltalk, хоть и непривычный, но очень простой (нужно только привыкнуть к keywords - это имена сообщений с точками вроде whileTrue: у вас). Приорететы очень просты: unary selectors > binary selectors > keywords и слева направо. Поэтому в 2 + (3 * 3) - нужно ставить скобки.
Разделитель - точка
присваивание :=
В квадратных скобках - блоки (на самом деле тоже объекты).
; - оператор каскадирования (потом прочитаете, жить можно и без него )


С учетом всего сказанного, ваш код вот такой (я заменил ф-цию, потому что ваша не сходится методом итераций):

Код:
|x eps y|
x:=1.
eps:= 0.000001.
y:= x sin + 1.
[(y-x) abs >= eps] whileTrue: [x:=y. y := x sin + 1].
y.
Ответить с цитированием
  (#4 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 16.10.2004, 16:10

welcome %)
в задачке стиль вполне процедурный, и решение у вас правильное, за исключением синтаксических ошибок. Быстрое введение в синтаксис - тут: http://minnow.cc.gatech.edu/squeak/1859 (прежде всего SqueakLanguageRef), более подробная и очень хорошая книга о программировании Smalltalk тут: http://www.iam.unibe.ch/~ducasse/FreeBooks/ByExample/
Кроме того smalltalk.ru

Синтаксис Smalltalk, хоть и непривычный, но очень простой (нужно только привыкнуть к keywords - это имена сообщений с точками вроде whileTrue: у вас). Приорететы очень просты: unary selectors > binary selectors > keywords и слева направо. Поэтому в 2 + (3 * 3) - нужно ставить скобки.
Разделитель - точка
присваивание :=
В квадратных скобках - блоки (на самом деле тоже объекты).
; - оператор каскадирования (потом прочитаете, жить можно и без него )


С учетом всего сказанного, ваш код вот такой (я заменил ф-цию, потому что ваша не сходится методом итераций):

Код:
|x eps y|
x:=1.
eps:= 0.000001.
y:= x sin + 1.
[(y-x) abs >= eps] whileTrue: [x:=y. y := x sin + 1].
y.
Ответить с цитированием
  (#5 (permalink)) Старый
Dimitrii Dimitrii вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.02.2004
По умолчанию Smalltalk и математика - 17.10.2004, 13:43

Большое спасибо за ответ, надеюсь ,что я останусь приверженцем этого замечательного языка. Уже сейчас я понимаю, что С++ с его объектной моделью основаной на модели языка Simula не был лутшим путем..которым увы пошло большинство современных "объектно-ориентированных" языков программирования.
Синтаксис действительно очень простой(что и удручает, после других языков).
Все гениальное просто!
Ответить с цитированием
Ads.
Ads
  (#6 (permalink)) Старый
Dimitrii Dimitrii вне форума
Member
 
Сообщений: 53
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.02.2004
По умолчанию Smalltalk и математика - 17.10.2004, 13:43

Большое спасибо за ответ, надеюсь ,что я останусь приверженцем этого замечательного языка. Уже сейчас я понимаю, что С++ с его объектной моделью основаной на модели языка Simula не был лутшим путем..которым увы пошло большинство современных "объектно-ориентированных" языков программирования.
Синтаксис действительно очень простой(что и удручает, после других языков).
Все гениальное просто!
Ответить с цитированием
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Математика в программировании. Глеб Языки программирования 10 01.04.2012 18:40
Что такое дискретная математика Ольга) Вопросы начинающих программистов 2 18.05.2011 04:33
Пишу на заказ - Pascal, C++, Delphi, C#, Высшая математика flash1989 Задания за деньги 1 13.04.2011 21:24
Дискретная математика матрицы смежности вершин Ann Stone Вопросы начинающих программистов 1 22.03.2009 09:29
Как переписать программу с SmallTalk V на VisualAge SmallTalk Novikov Smalltalk 1 25.10.2007 15:43
математика Radm Prolog 1 11.04.2007 09:04
UML и драйвер как их объединить Explod Железо. Написание драйверов 2 16.06.2006 21:34
Объединить два массива Милый бомж Pascal 19 14.04.2006 01:18
Математика современности kost Игры разума 16 15.01.2006 18:29
Математика или физика? Alex437 Мысли вслух 49 05.12.2005 10:37
Как объединить две таблицы mikh SQL 6 17.04.2004 02:32
Дискретная математика что это такое Anonymous Алгоритмы 1 05.12.2003 17:56



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