2013-03-30 4 views
1

Tenir compte:Pourquoi l'interpréteur de rebol renvoie-t-il des résultats différents?

>> print max 5 6 7 8 
6 
== 8 

La documentation indique que max ne prend que deux arguments, donc je comprends la première ligne. Mais à partir de la deuxième ligne, il semble que l'interpréteur soit toujours capable de trouver le maximum d'un nombre arbitraire d'arguments.

Que se passe-t-il ici? Quelle est la différence entre les deux résultats renvoyés? Y a-t-il un moyen de capturer le second?

Répondre

5

Je ne sais pas vraiment Rebol mais ce que je remarque c'est que vous utilisez print à l'intérieur du REPL. La première sortie est de print, qui produit le résultat de max 5 6. La deuxième sortie provient du REPL, qui produit la valeur de votre expression entière - qui est peut-être juste le dernier élément de la liste? Si vous avez changé l'ordre de vos entrées, je parie que vous verriez un résultat différent.

+0

Vous avez raison. C'est l'interpréter dans un ordre différent de ce à quoi je m'attendais, ce qui a causé la confusion. – jwalk

+0

@hobbs l'a, à peu près. La 'liste' comme il l'appelle, n'est pas vraiment une série! dans la mesure où le dialecte «do» voit les choses, car elles ne sont pas entre crochets, mais sont simplement des entiers 4 les uns après les autres. Les deux premiers servent d'arguments à 'max', tandis que les derniers sont des entiers autonomes! expressions qui évaluent à eux-mêmes. – Adrian

+0

Eh bien, si vous tapez ">> 8" alors vous verrez "== 8" sur la console. Cela signifie "8, renvoyé 8". Dans votre exemple, vous avez calculé quelque chose (max), puis imprimez le résultat du calcul (6) puis vous faites sept (7) puis DO 8 qui retombent 8 à la console (la ligne == signifie la valeur de retour, n'est pas une sortie de PRINT ou PROBE) – endo64

2

max est l'abréviation de maximum. Comme @hobbs l'a deviné correctement, cela prend deux arguments, et ce que vous voyez est juste la logique de l'évaluateur qui consiste à tourner la manivelle ... et à devenir égale à la dernière valeur de l'expression. Dans ce cas, vous n'utilisez pas ce résultat, l'interpréteur vous le montre avec "==". Mais vous auriez pu assigner cette expression entière à une variable (par exemple).

Ce que vous vouliez, c'est quelque chose qui tire le maximum d'une série. Dans le dialecte DO toutes les fonctions ont une arité fixe, et la bonne façon de concevoir une telle bête serait de faire prendre un argument ... la série.

Une telle chose existe, mais il n'y a pas une abréviation ...

>> print maximum-of [5 6 7 8] 
8 
Questions connexes