2013-05-23 3 views
0

Я пытаюсь реализовать расширенный алгоритм Евклида, приведенный в псевдокоде ниже, в KornShell (ksh).Внедрение KornShell из псевдокода

У меня проблемы с линиями с «: =» - я не знаю, что это значит.

У меня также возникают проблемы с несколькими возвращаемыми переменными.

Как это реализовать?

function extended_gcd(a, b) 
    x := 0 lastx := 1 
    y := 1 lasty := 0 
    while b ≠ 0 
     quotient := a div b 
     (a, b) := (b, a mod b) 
     (x, lastx) := (lastx - quotient*x, x) 
     (y, lasty) := (lasty - quotient*y, y)  
    return (lastx, lasty) 
+0

Код psudo НЕ является оболочкой korn. Вы пытаетесь реализовать этот psudo-код в оболочке korn? – gbtimmon

+0

Также. DONT реализует это в ksh. Это не то, для чего был разработан ksh, и для этого будет крайне сложно использовать оболочку korn. – gbtimmon

ответ

0

: = часть:

: = не для сценариев оболочки, для выполнения заданий мы используем простой "=" в сценарии, то есть переменная = "ABCD";

: = доступен в других инструментах, хотя, как и в make, где он обозначает немедленное назначение.

что непосредственное назначение означает, что переменной присваивается значение в момент его разбора.

Есть также другие варианты, доступные как =? ... и т.д.

FXN возвращаемое значение часть:

сво основное правило, что функция может возвращать только одно значение.

Но если вы заинтересованы в возможности использовать несколько переменных вне тела функции, тогда - bash/korn/shell вообще не имеют какой-либо конкретной концепции в качестве локальной переменной.

По умолчанию все переменные, которые у вас есть в сценарии, являются глобальными, т.е. доступны по всему .... но только в пределах текущей оболочки.

вам нужно будет экспортировать переменные, чтобы сделать их доступными в дочерней оболочке. синтаксис: export variable_name;

Также необходимо использовать фигурные скобки {} для определения тела функции. т.е.

fxn_name() 
    { 
     var=$1; ## if you want to use a variable 
     ...... 
     .... 
     } 

его invokation/вызов fxn_name $ Arg;

+0

Внутри 'function foo {...}' (но * not * 'foo() {...}' в некоторых реализациях ksh), вы можете получить «локальную» переменную командой 'typeset'. –

Смежные вопросы