1898年（明治31年）3月、高知県高知市水通町（すいどうちょう）で楢原多吉の息子として生まれた。1915年（大正4年）、県立第一中学校卒を経て、1920年（大正9年）7月、海軍兵学校（48期）を卒業。翌年6月に海軍少尉任官。その後、海軍水雷学校、海軍砲術学校、海軍潜水学校の各普通科を卒業した。1923年（大正12年）12月、「第22潜水艦」乗組となる。以後、潜水艦乗務が続き、1931年（昭和6年）12月、「呂号第27潜水艦」長に就任。1933年（昭和8年）11月、海軍少佐に昇進し、1934年（昭和9年）3月から7月まで潜水学校甲種学生として学んだ。1934年7月、「呂号第27潜水艦」長に復帰し、駆逐艦「朝風」「帆風」の各艦長、「伊号第54潜水艦」「伊号第71潜水艦」の各艦長、駆逐艦「江風」艦長などを歴任。1938年（昭和13年）11月、海軍中佐に進級。同年12月、「伊号第57潜水艦」艦長となり、「伊号第58潜水艦」「伊号第6潜水艦」の各艦長、「伊号第19潜水艦」艤装員長・艦長を歴任し、太平洋戦争を迎えた。真珠湾攻撃において第一航空艦隊の哨戒隊を務める。1942年（昭和17年）7月、横須賀鎮守府付となり、同月、第6潜水隊司令に着任し、1943年（昭和18年）5月、海軍大佐に昇進。以後、第33潜水隊司令、第34潜水隊司令、第12潜水隊司令、第7潜水隊司令等を歴任。1944年（昭和19年）7月、内南洋方面で乗艦「伊号第5潜水艦」が戦没。戦死と同時に海軍少将に特進した。
PSDは1974年5月6日、フランシスコ・サー・カルネイロ、フランシスコ・ピント・バルセマン、ジョアキム・マガリャンイス・モータらにより、PPD（Partido Popular Democrático 人民民主党）として結成され、5月15日に最初の党本部をリスボンのラルゴ・ド・ラトに置いた。これに続いて6月24日には党委員会が組織され、フランシスコ・サー・カルネイロ、フランシスコ・ピント・バルセマン、ジョアキム・マガリャンイス・モータ、バルボサ・デ・メーロ、モータ・ピント、モンタルヴァン・マシャド、ミゲル・ヴェイガ、フェレイラ・ジュニオル、アントニオ・カルロス・リマ、アントニオ・サラザール・シルヴァ、ジョルジェ・コレイア・ダ・クーニャ、ジョルジェ・フィゲイレド・ディアス、ジョルジェ・サー・ボルジェスなどが名を連ねた。また機関紙ポーヴォ・リブレは。マヌエル・アレグリア、ルイ・マシェテにより1974年6月13日にはじめて発行された。PSDの最初の重要会議は10月25日、リスボンの"パヴィーリャン・ドス・デスポルトス（Pavilhão dos Desportos）"で開催され、翌月には最初の公式党大会も行われた。1975年1月17日にはPSDを正当な政治団体と承認させるための署名を最高裁判所へ提出した。8日間で6300もの署名が集まったという。
IFT ("if-then")文とIFTE ("if-then-else")文を使うことによって後置条件式を実現できる。IFTとIFTEはそれぞれ2つまたは3つのオブジェクトをスタックから取り出す。取り出した2つまたは3つのオブジェクトの最上位のオブジェクトは真偽値として評価される。もしも真ならば、上から2番目のオブジェクト（"then"に相当）はスタックに戻される。IFTEは上から3番目の"else"に相当するオブジェクトを必要とする。偽の場合、そのオブジェクトがスタックに戻される。以下の例は、IFT文の例である。スタックの底辺から1つのオブジェクトを取り出し、それが1ならば、1を"One"に置き換える。 « 1 == "One" IFT »（説明）上のコードの 1 はオブジェクトなので、すぐにスタックに入れられる。そして、==コマンドがスタックから2つのオブジェクトを取り出す。もちろん1を先にスタックに入れているので、1の上のスタックレベルにもオブジェクトがないとオブジェクトが不足する。そのオブジェクトはプログラム実行前にユーザーが自分でスタックに入れる必要がある。==コマンドは2つのオブジェクトを比較して、同じ場合は真(1)を、異なる場合は偽(0)をスタックに入れる。次に"One"もオブジェクトなので、スタックに入れられる。つまりスタックの状態は以下のようになる。2: 0 or 1（条件式の結果）1: "One"（thenに相当するオブジェクト）そして、IFTコマンドが上の状態のスタックから2つのオブジェクトを取り出して、上のスタックレベル2が真(1)ならば、"One"を実行するが、"One"はただのオブジェクトなので、またスタックに入れられる。以下の例はIFTE文の例である。スタックの底辺からオブジェクトを取り出し、それが1と等しいならば、1を"One"に置き換える。それが1でない場合は、それを"Not one"に置き換える。 « 1 == "One" "Not one" IFTE »IFTとIFTEは引数として与えられたプログラムブロック（下のコードの最初の行と最後の行以外の« »で囲まれたところ）を条件によって評価・実行することがある。その動作を利用することによって、IF/THEN/ELSE/END構造よりもさらにコンパクトな条件文を作ることができる。以下の例はスタックの底辺からオブジェクトを取り出して、それが1と等しいのか、1より小さいのか、1より大きいのかを判断してからそれを"One"、"Less"、"More"のどれかに置き換える。«  DUP 1 ==  « DROP "One" »  « 1 < "Less" "More" IFTE »  IFTE»（説明）RPLはオブジェクトと見なしたものはそれがプログラムブロックでも実行しないでスタックに入れる。そのため、プログラムブロックは評価(evaluate)されるまで実行されない。そのため、IFTEが実行される直前のスタックの状態は以下のようになる。3: 0 or 1（条件式の結果）2: « DROP "One" »1: « 1 < "Less" "More" IFTE »IFTE文はスタックから3つのオブジェクトを取り出す（つまり上の3つのオブジェクトはスタックから取り除かれる）。条件式の結果が真(1)のときは"then"に対応するプログラムブロック（« DROP "One" »）を評価する。その結果、オブジェクトはプログラムブロックなので実行される。結果が偽(0)の場合は、"else"に対応するプログラムブロック（« 1 < "Less" "More" IFTE »）を評価し、プログラムブロックなので実行する。