очень простой цикл в F # - PullRequest
2 голосов
/ 27 января 2010

Я пробовал это как в FSI, так и в VS2010. Оба выдают одинаковый вывод.

for i= 8 to 10 do
    for j=7 to 10 do
    let product=i*j
    printfn "%d * %o = %x" i j product

и вывод:

8*7=38
8*10=40
8*11=48
8*12=50
9*7=3f
9*10=48
9*11=51
9*12=5a
10*7=46
10*10=50
10*11=5a
10*12=64
val it : unit = ()

Я что-то здесь упускаю?

Я пытаюсь научиться программированию (с F #, потому что мне это нравится) с онлайн-уроками.

Ответы [ 4 ]

12 голосов
/ 27 января 2010

Вывод мне кажется правильным, поскольку вы форматируете выходные данные i, j и product в десятичном (%d), восьмеричном (%o) и шестнадцатеричном (%x), соответственно.

Числа 7, 8, 9 и 10 форматируются как 7, 10, 11 и 12, потому что это их восьмеричное представление. Измените их все на %d или %i, чтобы решить проблему.

5 голосов
/ 27 января 2010

Да. Вы что-то упускаете. 10 (десятичное число) * 10 (восьмеричное) = 50 (шестнадцатеричное). % d означает десятичную,% o означает восьмеричную, а% x означает шестнадцатеричную. Если вы не знаете, что это такое, погуглите их.

Ниже приведены все те же утверждения.

В десятичном виде:

10 * 8 = 80.

в восьмеричном виде:

12 * 10 = 120

в шестнадцатеричном формате:

a * 8 = 50.

Пожалуйста, внимательно посмотрите на что-то, прежде чем скопировать.

5 голосов
/ 27 января 2010

Полагаю, речь идет о строке форматирования printfn. Просто попробуйте %i.

for i = 8 to 10 do
    for j = 7 to 10 do
        let product=i*j
        printfn "%i * %i = %i" i j product
0 голосов
/ 27 января 2010

Обратите внимание, что документы по спецификаторам формата printf находятся здесь

http://msdn.microsoft.com/en-us/library/ee370560(VS.100).aspx

(хотя на сегодняшний день форматирование документа немного запутано, что затрудняет чтение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...