سؤال

وأنا يحاول كتابة التعليمات البرمجية لطباعة حرف Z.

zzzzzzz
     z
    z
   z
  z
 z
zzzzzzz

ولكن عندما كنت تجميع هذا الرمز، فإنه يلقي

D:\erlang\graphics>erlc zeez2.erl
d:/erlang/graphics/zeez2.erl:19: head mismatch
d:/erlang/graphics/zeez2.erl:6: function zeez/3 undefined

وأنا لا يمكن إصلاح هذا الخطأ. لم أجد ما الخطأ في بلدي يمكن.
يمكن للمرء يرجى توحي لي.
شكرا لك.

-module(zeez2).
-export([main/0]).

main() ->
    L = 8,
    zeez( false ,1, L). % line 6

zeez(true, M,M) ->
    init:stop();

zeez(false, M, N) ->
    io:format("~p~n", [zeez(z, N-M)] ),
    zeez(M rem N =:= 0, M + 1, N );

zeez(true, M, N) ->
    io:format("~p~n", [zeez(space, N-M)] ), % line 16
    zeez(M rem N =:= 0, M + 1 , N );

zeez(space, M) ->
    io:format("~p~n", ["-" ++ zeez(space, M-1)] );

zeez(space, 0) ->
    "Z";

zeez(z, M) ->
    io:format("~p~n", ["Z" ++ zeez(z, M-1)] );

zeez(z,0) ->
    "Z".
هل كانت مفيدة؟

المحلول

والمشكلة هي أنك قد اختلطت 2 وظائف:

وzeez / 2 و zeez / 3

إذا إنهاء وظيفة zeez / 3 بإنهاء مع وقف كامل لا منقوطة يجب تجميع:

zeez(true, M, N) ->
    io:format("~p~n", [zeez(space, N-M)] ), % line 16
    zeez(M rem N =:= 0, M + 1 , N );                      <-- should end with .

ورسالة الخطأ تعني، "يا أنا في zeez / 3 وكنت قد القيت في الفقرة 2-arity، وتف؟

نصائح أخرى

وكنت في محاولة لتحديد وظيفتين، الأولى مع 3 المعلمات (zeez / 3) وآخر مع معلمات 2 (zeez / 2). الخطأ عدم تطابق الرأس لأن zeez / 3 الدالة على السطر السابق ينبغي إنهاء مع ''.

وأي بمعنى. لأنك أنهى السابقة zeez / 3 وظيفة مع '؛'، أنها تتوقع الإعلان التالي لتكون مباراة أخرى لzeez / 3:

zeez(true, M, N) ->
    io:format("~p~n", [zeez(space, N-M)] ), % line 16
    zeez(M rem N =:= 0, M + 1 , N ).

zeez(space, M) ->
    io:format("~p~n", ["-" ++ zeez(space, M-1)] );

ويجب أن نلاحظ أيضا أن المترجم سوف تعطيك تحذيرات حول "... الفقرة السابقة في XXX خط دائما مباريات" بسبب ترتيب zees (الفضاء، 0) وzeez (الفضاء، M). يجب عليك ان تضع zees (الفضاء، 0) قبل zeez (الفضاء، M)، لأنه أكثر تحديدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top